- 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:
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:
Non ci credete? Lggetevi
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:
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.
Infatti dato un semplice form in html, ad esempio:
HTML:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
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!
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!
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.