29.09.05

PHP4 e GET parameters: il problema della sicurezza

Qualche giorno fa io e PHP abbiamo litigato; o meglio, a me sembrava di non aver fatto niente di male, ma lui ha improvvisamente smesso di accettare le mie GET.
Ma come, le mie GET sono sempre state uno dei tuoi piatti preferiti e adesso
mi fai capire che non le digerisci?

Facciamo un passo indietro.

Un anno fa nasce il sito del CDM, ospitato sui servers dell'associazione Orlando.
Tutto sembra funzionare piuttosto bene fino a qualche settimana fa, quando le sistemiste di Orlando decidono per un'aggiornamento del software sui servers... e passano fra le altre cose a PHP4.

I progettisti di PHP4 hanno deciso di migliorare questo linguaggio dal punto di vista della sicurezza; in che modo?
Fino a PHP3, andando a modificare opportunamente il file di configurazione di PHP, cioè PHP.ini, lo sviluppatore poteva decidere se accettare GET parameters o non accettare GET parameters.

Per fare un esempio, da qualche parte nel codice io posso scrivere:

<\A href="index.php?ok=cosaequando">Cosa e quando<\/A>

Per poi riacciuffare il mio parametro così:
if($ok=='cosaequando')
{
//faccio qualcosa
}

Bene, con PHP3 questo codice funziona, basta che io abbia scritto nel file
PHP.ini:

register_argc_argv = on;

Se invece scrivo:

register_argc_argv = off;

...il mio codice non fa nulla.

Questa gestione delle GET variables però lasciava aperta una bella porta agli accessi malevoli al sito.
Chiunque dalla barra degli indirizzi poteva andare a valorizzare variabili interne, perchè il modo in cui si accede alle GET variables è esattamente uguale a quello di tutte le altre variabili.
L'implementatore quindi poteva scegliere o di rinunciare del tutto alle GET variables(peccato!), o di utilizzarle e incrociare le dita :(.

PHP4 è diverso.
Basta scrivere nel file PHP.ini:

register_argc_argv = on;
register_globals = off;

A questo punto si possono utilizzare le GET variables, ma non è più possibile riferirle come $<\nome_variabile>, ma soltanto come $_GET['nome_variabile'], con una distinzione sostanziale tra variabili interne e variabili GET.

Posted by beatrice2005 at 29.09.05 12:47
Comments