PHP  »  Guide  »  Guida sicurezza di PHP 

HTTP Response Splitting



Introduzione

Quanto detto al riguardo delle inclusioni dinamiche ha effetto anche per i rindirizzamenti dinamici via PHP. Si abbia l'istruzione seguente posta in un qualsiasi punto di uno script:

header("Location:".$_GET['GoTo']);

Non è necessario spiegare ulteriormente il possibile exploit: una query string ben studiata può rindirizzare il flusso della navigazione dove voluto. E sappiamo anche come difenderci.

Questa volta tuttavia non è finita qui: essendo eseguita lato server, l'istruzione header può indurre il browser a impostare un cookie (impostare un cookie infatti altro non vuol dire che inviare uno header opportuno) voluto dal cracker stesso, esattamente come se arrivasse, consciamente, dall'applicazione remota:

http://my_site/test.php?GoTo=http://remote_site/main.php%0D%0ASet-Cookie:%20PHPSESSID=12e6rv93ee5c9952

Il comando PHP header non vedrà solamente il rindirizzamento, ma anche una seconda riga (%0D%0 è la codifica per gli URL di \r\n) in cui si invia appunto al client (la richiesta di impostare) il cookie.

Molto, ma molto, importante è che questo exploit potrebbe portare ad un attacco di tipo "session fixation" in quanto induce il browser a impostare un cookie contenente dati di sessione (vedere più avanti).

Rimedio

Il rimedio è semplicissimo: evitare che il comando Set-Cookie possa esser inviato via query string, tramite la seguente riga di codice:

if (strpos(strtolower($_SERVER['REQUEST_URI']),"set-cookie:")!==false) exit;

Posta all'inizio di ogni script. Alternativamente - e più efficacemente - possiamo eliminare tutti i caratteri di CR+LF (ritorno a capo e nuova riga: \r\n). Da porre attenzione al fatto che Windows e Linux differiscono in tale codifica: la presente è quella usata dai sistemi operativi Windows.

Nota

Per visualizzare un cookie presente sulla nostra macchina utilizziamo, con Firefox, la seguente finestra: Strumenti / Opzioni / Privacy / Cookie.

I cookie standard usati da PHP per tener traccia dei dati di sessione (mantenendo cioè le impostazioni di default nel php.ini) scadono alla chiusura del browser: sono visualizzabili come sopra descritto ma non vengono salvati su filesystem locale, rimanendo in memoria per tutta la loro (in genere breve) vita.

Ultimi articoli PHP

Sessioni PHP: cosa sono, come si usano

Dalla configurazione di PHP, alla gestione delle sessioni in un...

Continuous Integration: automatizziamo i client con Phing

Continuous Integration: automatizziamo i client con Phing. Esempi...

Archiviazione delle applicazioni PHP con Phar

Come incorporare intere applicazioni PHP all'interno di un singolo...

I traits in PHP 5.4

Cosa sono, a cosa servono e come si unsano i traits, la novità per...

PHP 5.4: il web server integrato

Impara ad usare il web server integrato nella versione 5.4 di PHP:...

Altri articoli

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Guida PHP con Windows e IIS

Installare ambienti per lo sviluppo e la produzione di applicazioni...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti