Globálisan is elérhető változók (Register Globals) használata
A biztonság növelésére használható a PHP egyik lehetősége: a
register_globals = off beállítás
használata. Ennek a kikapcsolása azt jelenti, hogy a felhasználótól jövő változók
nem "szennyezik be" akaratlanul a PHP kódot, és így csökken a potenciális
támadó által befolyásolható változók köre. Még több időt kell azzal tölteniük,
hogy kitalálják a változók feltöltésének módját, és a belső változóid
hatékonyan elkülönülnek a felhasználó által elküldött adatoktól.
Az ezzel járó előnyök messze felülmúlják azt a kevés kényelmetlenséget, amelyet
a megnövekedett munka mennyisége okoz.
Példa 5-14. register_globals=off nélkül <?php
if ($usernev) { // felhasználható által hamisítható get/post/cookies
$jo_belepes = 1;
}
if ($jo_belepes == 1) { // felhasználható által hamisítható get/post/cookies
fpassthru ("/nagyon/kenyes/adatok/index.html");
}
?> |
|
Példa 5-15. register_globals = off használatával <?php
if($_COOKIE['usernev']){
// csak sütiként jöhet, hamisítva vagy épp ellenkezőleg
$jo_belepes = 1;
fpassthru ("/nagyon/kenyes/adatok/index.html");
}
?> |
|
Okosan használva, még azt képes lehet jelezni, ha hamisítást
kíséreltek meg. Ha előre tudható, hogy mely változóknak honnan
kell érkezniük, akkor azt is megvizsgálhatod, hogy vajon más módon nem
próbálták-e elküldeni ezt a változót. Ez nem garantálja, hogy az adatok
nem hamisíthatók, azonban megköveteli a támadótól, hogy az rátaláljon
a megfelelő hamisítási módszerre.
Példa 5-16. Egyszerű változó-átvétel felfedése <?php
if ($_COOKIE['usernev'] &&
!$_POST['usernev'] &&
!$_GET['usernev'] ) {
// egyéb usernev azonosítások elvégzése ...
$jo_belepes = 1;
fpassthru ("/nagyon/kenyes/adatok/index.html");
} else {
mail("admin@example.com", "Lehetséges betörési kísérlet", $_SERVER['REMOTE_ADDR']);
echo "Védelmi szabályok megszegése, adminisztrátor értesítve.";
exit;
}
?> |
|
Természetesen register_globals egyszerű kikapcsolása nem jelenti azt, hogy
a kód biztonságos. Minden beérkező adatot valamilyen egyéb módon ellenőrizni
kell.