Se hai una variabile $_GET[“pippo”], attivando le register_globals ti trovi anche $pippo con lo stesso valore.
Questo e` un buco di sicurezza perche`:
- stai usando una variabile che non hai controllato in nessun modo
- potresti confonderti e pensare di usare una variabile che hai definito e trovarti a usarne una proveniente dal browser
- non sai mai da dove arriva (GET? POST? Sessione? Cookie? un’include?)
Anche con $_GET[‘pippo’] un malintenzionato potrebbe caricare dall’esterno tramite pagina.php?pippo=10 un valore su cui non ho il controllo o sbaglio?
Si`, ma sai esattamente da dove arriva (GET), mentre con i register_globals, come dicevo, non lo sai.
Metti caso che tu definisci una variabile “loggedin” e hai le register_globals, e la salvi in sessione:
$loggedin = 1; session_register($loggedin);
Poi, su tutte le pagine, controlli se l’utente e` loggato:
if ($loggedin == 1) { // permetti l'accesso }
Poi arriva l’utente che ti fa un bel
pagina.php?loggedin=1
E tu non sai piu` se quel loggedin arriva dalla tua sessione o dal GET. Se arriva dal GET, il tuo utente ha appena bypassato totalmente il tuo controllo ed accede alle pagine che vuole.
Senza register_globals tu avresti scritto
$_SESSION['loggedin'] = 1;
….
if ($_SESSION['loggedin'] == 1) { // permetti l'accesso }
e lui saebbe rimasto fregato.