Gli attacchi XSS si basano sul fatto che l'input viene trasmesso al browser dell'utente finale. L'attacco più comune è fondamentalmente un sito PHP contenente
<?php
echo $_GET["message"];
?>
Passerai quindi a questo URL un parametro contenente il codice javascript.
Se desideri configurarlo, crea un file something.php
sul tuo server web, inserisci il codice sopra e accedi a http://your-server/something.php?message=<script>alert('XSS');</script>
nel tuo browser. Dovrebbe quindi visualizzare un popup contenente XSS.
In una pagina HTML statica, questo non è possibile, poiché genera solo contenuti basati sul codice HTML statico del server. XSS richiede l'inclusione del codice fornito dall'utente. L'esclusione è, se il codice HTML carica un codice javascript vulnerabile, che consente l'input fornito dall'utente.
Il punto principale di XSS è che un utente malintenzionato vuole includere il codice HIS sul tuo sito web, senza effettivamente hackerare il server web. Questo è possibile solo con linguaggi di programmazione lato server, che generano qualcosa, l'autore dell'attacco precedentemente inserito nel server.
Fondamentalmente l'hacker vuole che l'HTML guardi al browser in questo modo
<html><body>Foo<script>alert('XSS');</script></body></html>
invece di
<html><body>Foo</body></html>
Pensa ad esempio a un forum oa commenti su un articolo. L'utente dovrebbe essere autorizzato a lasciare le sue osservazioni. Il server deve salvare questo e presentare lo stesso commento ad altri utenti. Se il commento stesso contiene codice javascript e il programma server non lo attenua, produrrebbe lo stesso codice come parte del blocco dei commenti.
Quanto a quando questo è caricato nel browser, non è facile rispondere. Dipende da dove il codice dell'hacker è incluso nel corpo della pagina o dai file javascript caricati successivamente. Se è incluso come tag javascript nell'HTML principale, verrà caricato dopo il completamento del carico DOM.
Soprattutto come accennato prima, la vulnerabilità XSS potrebbe verificarsi anche all'interno di un file javascript (che prende l'input dell'utente, ad esempio un URL e lo carica). In questo caso non è possibile dire quando verrà eseguito esattamente il codice. Puoi associare questo codice javascript a un pulsante, a un evento textblock () o a un timer.
EDIT:
Esaminando l'attacco javascript, ecco cosa inseriresti nel file del tuo server
<html><body>
<script type="text/javascript">
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]});
document.write(decodeURIComponent(queryDict["message"]));
</script>
</body></html>
Le prime due righe, basicamente prendono tutti i parametri GET e li suddividono in un array (tratto da qui ). La terza riga restituisce semplicemente questo nella pagina HTML. Ovviamente questo potrebbe anche essere fatto da qualsiasi altra manipolazione DOM dal codice eseguito.