2007.01.01.
register_globals=on emulálása
Már egy jó ideje annak – kb. a 4.0.6 verziótól kezdve – hogy a PHP a register_globals változót alapértelmezésben kikapcsolt (off) állapotban javasolja biztonsági ill. teljesítmény megfontolások alapján.
Az alábbiakban egy röpke példa, hogy miről is beszélek. Vegyük pl. az alábbi kódot:
...
if($login == ... && $password == ....)
$x = 1;
if($x == 1){
// sikeres autentikacio ... }
else {
die("autentikacio nem sikerult");
}
Ebben az esetben a támadónak nincs arra szüksége, hogy kitaláljon egy érvényes login nevet és jelszót, az is elég, ha az x=1 paramérert is átadja a scriptnek inputként, és már át is lépte az autentikációt.
Még mindig sok olyan php kódoló van, akik úgy írják meg a php script-jeiket, hogy bekapcsolt (on) állapotot feltételeznek. Ha pedig kellően sok CGI változóval dolgozik a script, akkor bizony szép munka azt átírni, pl. $x helyett $_GET['x']. Ebben az esetben az alábbi rövid kódrészlet segít, ha a script elejére teszed:
while(list($k, $v) = each($_GET)) $$k = $v;
POST metódusnál teljesen hasonlóan a $_POST nevű globális tömb használható.




