Autor Zpráva
Mr.S1lent.cz
Profil *
Zdravim,

mam takovy mensi problem s regularnimi vyrazy, jelikoz ty mi nikdy bohuzel nesly - vetsinu jsem jich okopiroval, ale ted me napadla jedna takova sikovna vecicka, se kterou bych potreboval pomoci...

jedna o osetreni praci s promennymi get predavane v url. v podstate to mam osetrene celkem sikovnym, tezko prolomitelnym mechanismem,
ale rad bych monitoroval jednotlive pokusy o php injection pri pokusech zneuzit metodu include.

Metoda monitorovani funguje na tom zaklade, ze mam specifikovane mozne rozsahy danych promennych (vetsinou pocet znaku, nebo porovnanim jejich matematickych hodnot), ale jen u promennych, se kterymi pracuji (ktere jsou prirazene k ridici strukture "switch($_GET['prom'])").
Pokud treba dejme tomu budu mit nadefinovane dve ridici struktury s promennymi "$prom1" a "$prom2", muze vysledny nahodny link vypadat takhle: "index.php?prom1=hodnota1&prom2=hodnota2" ale pokud mi tam nekdo bude chtit podstrcit svoji promennou napr:
"index.php?prom1=hodnota1&hack=neco", metoda monitorovani to nezaregistruje, proto jsem chtel napsat nejaky regularni vyraz do metody "preg_replace_callback" a take fukci, ktera provede "orezani" nezadoucich znaku.

moje predstava jest takova:

1) regularni vyraz ($re), ktery definuje fragmenty retezce ktere zacinaji "&" a konci "=", popr "?" a "=".
2) funkce callback($match), ktera orizne z onech fragmentu retezce nezadouci okrajove znaky (prvni a posledni - "&" a "=", popr "?" a "=")
3) metoda preg_replace_callback($re, function callback, $url), na ktere to vsechno "bude stat"
4) nejlepsi by bylo, kdyby to vsechny takto vybrane hodnoty zapsalo do nejakeho pole

potom bych mohl overit, zda se takto ziskane fragmenty retezce shoduji se seznamem promennych (pro tento priklad jsou to $prom1 a $prom2),
pokud nikoliv, jednoduse nadefinuji jako vystupni program podminky promenne $prom1 "zakazanou" hodnotu, coz zapricini spusteni monitorovaciho
programu nezadoucich vstupu, o kterem jsem mluvil na zacatku.

Nekomu se to muze zdat zbytecne, ale ja jsem puntickar a na svych webech bych chtel mit vsechno "spigl nigl", proto bych vam byl moc vdecny, kdyby jste mi pomohli nekdo napsat dany script, ja ho pote zkusim nastudovat a posunout se zase v psani regularnich vyrazu nekam dale, take si zaroven myslim, ze by jste mohli muj napad taky nejak vyuzit.

Pokud dojde ke zdarnemu vyreseni tohoto problemu, neni problem vam nabidnout cely tento kontrolni script ke stazeni, minimalne na prostudovani :-)

s pozdravem

Mr.S1lent.cz
tiso
Profil
Mr.S1lent.cz - riešil som niečo podobné, ale pracoval som priamo s poľom $_GET:
$tmp=$get=array();
if(!empty($_GET)){
	$tmp=$_GET;
	$params=array('l', 'a', 'e');//povolene premenne
	foreach($params as $val){
		if(!empty($tmp[$val])){
			$get[$val]=$val.'='.$tmp[$val];
			unset($tmp[$val]);
		}
	}
	if(!empty($tmp)){redirectTo($get);}//presmeruj na spravnu adresu
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: