---=== HTTP Response Splitting ===--- - by BlackLight - L'HTTP Response Splitting e' un tipo di header injection, ovvero un potenziale attacco che consente di iniettare contenuti inattesi negli header di risposta di un server HTTP. Lo scopo spesso e' quello di dirottare l'utente verso un'altra pagina, e viene spesso usato per forgiare attacchi XSS o CSRF. Vediamo subito come e' possibile iniettare nuovi header nella risposta di un server. Consideriamo la seguente applicazione CGI in C (dato che non e' nello scopo del tutorial insegnare i fondamenti della tecnologia CGI, per semplificare le cose useremo la mia libreria CGIC scaricabile da qui: http://blacklight.gotdns.org/soft.php ): #include #include #include main() { char *lang=get_field(strdup(get()),"lang"); printf ("Content-type: text-html\r\n" "Content-language: %s\r\n\r\n",lang); if (strstr(lang,"it")) #include "page_it.c" else #include "page_en.c" } Semplicemente, prende il parametro 'lang' via GET, setta l'header di risposta del tipo Content-language: e se la lingua e' 'it' visualizza la pagina in italiano, altrimenti in inglese. Se forigiassimo un URL in questo modo pero' http://sito.org/cgi-bin/app.cgi?lang=it%0D%0Alocation:http://www.google.it notiamo subito che avremmo generato un header di questo tipo nella risposta del server: Content-language: it Location: http://www.google.it Come risultato, l'utente verra' reindirizzato verso la pagina in questione. Si noti che in PHP la cosa puo' essere leggermente piu' difficile. Infatti la funzione header() del linguaggio non consente l'inserimento di piu' di un header field per volta, rendendo difficoltosa se non impossibile l'attuazione di questa tecnica. Il modo per difendersi lato server, e quindi proteggere l'utenza delle proprie pagine, come al solito e' quello piu' ripetuto in tutti i campi: verificare sempre l'input dell'utente, effettuare dei controlli e al massimo concedere il valore di una variabile solo all'interno di un certo insieme, validandola via switch-case.