Abbiamo appena completato alcuni test della penna su un'applicazione web e l'area identificata come Impatto alto e Probabilità media era:
Cross-Site scripting (reflected)
L'esempio fornito era la possibilità di manipolare un URL come:
www.domain.com/application/index.php/<IFRAME SRC=source.com onload="alert(document.cookie)"></IFRAME>
Tutti i dati che vengono effettivamente passati all'applicazione tramite moduli, GET ecc. sono sfuggiti e se si inserisce il codice iframe sopra in un modulo e lo si invia o lo si passa come parametro GET "non fa nulla" ma quando vado a questo URL in un browser, ottengo risultati variabili a seconda del browser che vanno dal nulla in Chrome e da IE a Firefox mostrando il cookie in un popup.
Risposta HTTP come richiesto:
GET /application/index.php/%3CBODY%20ONLOAD=alert%28%27XSS%27%29%3E HTTP/1.1
Host: "www.domain.com":http://www.domain.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Ovviamente non posso fare affidamento sull'utente che utilizza il browser corretto, quindi come posso mitigarlo in quanto il codice viene passato nell'URL stesso e, da quello che posso vedere, viene eseguito prima che l'applicazione venga caricata così non posso vedere come posso fuggire se viene eseguito nell'URL o sbaglio?
Non c'è una vera ragione per cui qualcuno dovrebbe passare ",", < o > tramite l'URL, quindi ci sono controlli a livello di server che possono eliminare i caratteri indesiderati dall'URL magari usando espressioni regolari in htaccess, ad esempio?