Perchè non attivare register_globals

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.