• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida PHP Impedire i Cross Site Scripting attraverso il nome del file chiamato da un form

MarcoGrazia

Nuovo utente
Autore del topic
25 Agosto 2015
23
0
Miglior risposta
0
Molti di solito utilizzano la comoda variabile globale del PHP $_SERVER['PHP_SELF'] per passare il nome dello script chiamante ad un file, comodo ma potenzialmente pericoloso.

Infatti dato un semplice form in html, ad esempio:
HTML:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo ci pone nel rischio di subire un XSS attack attraverso l'action del form stesso. Infatti ad un "malintenzionato" scoperto a cosa punta il form, gli basta passare nella barra dell'url del suo browser una stringa di questo tipo: ]http://miosito.bo/pagina_con_form.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo sembra incomprensibile? In realtà ha scritto: http://miosito.bo/pagina_con_form.php/"><script>alert('xss')</script><foo.
Banale? Certo l'esempio si dovrebbe limitare ad aprire un alert javascript con scritto XSS, ma pensate se in quella stringa javascript passava un url attivo su un altro server?
In ogni caso il meccanismo è semplice, prendiamo l'esempietto di prima:
HTML:
Perfavore, Entra oppure Registrati per vedere i codici!
Non ci credete? Lggetevi
Perfavore, Entra oppure Registrati per vedere i Link!
e capirete.

Nella pagina Sean dopo aver spiegato per bene come fare lo XSS spiega anche come ovviarvi, il meccanismo è semplice dopotutto, si tratta di verificare ciò che viene passato attraverso $_SERVER e gestirlo al meglio.
In anni di pratica anche io mi sono fatto la mia piccolissima esperienza e mi sono creato due alternative per generare il nome del file, sicuro, eccole:
PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
HTML:
Perfavore, Entra oppure Registrati per vedere i codici!
La prima utilizza il meccanismo dei filtri introdotto se non ricordo male con il PHP 5.2.x e l'altra un metodo più classico che funziona sempre e comunque.
Tutte e due i metodi comunque fanno un parsing della stringa passata da $_SERVER['PHP_SELF'] ed eliminano o meglio fanno l'escape dei valori aggiunti, il form non funzionerà per chi prova a fare il furbo, ma tanto quella persona non voleva certo iscriversi regolarmente no?
Chiaramente non è l'unico modo per pararsi il :nono2: ma è un ottimo inizio e non costa certo molto in termini programmazione.