Facciamo un esempio pratico per capire il problema della sicurezza che va a correggere REGISTER_GLOBALS OFF analizzando il seguente script che chiameremo
entra.php.
<?php
# Definisce "$authorized = true" solo se l'utente si e' autenticato
if (authenticated_user()) {
$authorized = true;
}
if ($authorized) {
include "/percorso/della/pagina/privata.php";
}
?>
Se il parametro REGISTER_GLOBALS fosse impostato ad ON, sarebbe facilissimo bucare il nostro script. Infatti, si potrebbe eseguire dal nostro browser una richiesta del tipo
http://www.nostrosito.estensione/entra.php?authorized=true aggirando così l'autenticazione perchè il nostro script avrebbe impostata la variabile
$authorized=true eludendo di fatto l'autenticazione!
Se invece REGISTER_GLOBALS è in OFF la variabile passata via GET non sarà disponibile come
$authorized, ma solamente come
$_GET['authorized'].
Ecco che se nel nostro sito ci installiamo uno script open source, e quindi con il codice alla portata di tutti, programmato con REGISTER_GLOBALS = ON rendiamo il nostro sito vulnerabile, in quanto basta che un malintenzionato se lo studi un pochino e scopra come 'bucarlo' passando le opportune variabili via GET.
Alla luce di quanto appena detto il mio spassionato consiglio è di non utilizzare dei cicli che convertano tutte le variabili speciali in variabili locali, e andare a convertirsi solo le variabili che effettivamente ci servono.