Semplice, qualcuno con i diritti da amministratore potrebbe registrare come globale una variabile contenente la tua password, che sarebbe condivisa tra tutti gli utenti del sito, carino, no?
Ho ricevuto diversi PM di utenti preoccupati che le loro password possano essere condivise tra tutti gli utenti ed allora è opportuno fare un poco di chiarezza sulla questione.
register_globals ha a che fare con la ricerca della definizione delle variabili attraversi i vari namespaces, non con una fantasiosa visibilità cross-sessions.
Quindi, tranquilli: nessuno può registrare come globale la vostra password e renderla disponibile a tutti.facciamo questo esempio (in pseudocodice)
/* pagina rg.php */
se (($_POST['utente_pw']) in (UtentiAutorizzati)){
$autorizzato=true;
}
{....}
se ($autorizzato) {
visualizzaDatiRiservati();
};
questo codice verifica se l'utente è autorizzato, e nel caso visualizza i dati riservati. tutto ok con
register_global off. uno richiama la pagina senza inviare i dati in post, $autorizzato non è definito e quindi la condizione non viene soddisfatta e i dati non vengono visualizzati. con
register_global on invece basterebbe richiamare
rg.php?autorizzato=1 la variabile $autorizzato, che non è definita in ENV viene trovata in GET e quindi la condizione è soddisfatta.
globals significa cioè che tutte le variabili sono viste come globali, ma sempre e solo quelle definite nella o trasmesse alla pagina, non certo quelle di altri utenti.
comunque sappiate che se il codice fosse stato scritto così:
/* pagina rg.php */
$autorizzato=false;
se (($_POST['utente_pw']) in (UtentiAutorizzati)){
...
sarebbe stato sicuro anche con
register_global on: il codice scritto bene è sicuro tanto in una modalità, quanto nell'altra.
Questa direttiva esiste per ragioni storiche, che sia sopravvisuta alla sua utilità, e che attualmente sia meglio impostarla ad off è altro discorso: ma la valutazione sulla sua opportunità dovrebbe tener conto di molti fattori, primo tra tutti il capire come funziona.
ciao e tranquilli.
marco