Lo scripting cross-site è uno scripting cross-site - la differenza tra DOM / persistent / riflette è solo nel modo in cui l'attacco viene eseguito (e prevenuto).
La minaccia è la stessa - un hacker ha in qualche modo iniettato javascript dannoso in pagine che non dovrebbero essere in grado di controllare, in genere a causa delle vulnerabilità nella progettazione del sito web.
Prendi l' esempio da OWASP , dove la pagina HTML, includeva alcuni javascript inline (parte all'interno dei tag) . Lo scopo del javascript in linea era una variabile del parametro di query "predefinito" e usarne il valore per modificare il DOM, ovvero modificare il valore del primo tag <option>
sul valore di tale parametro di query.
L'origine della pagina web (inviata attraverso la rete) assomigliava a:
Select your language:
<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
ma dopo essere stati visualizzati da http://www.some.site/page.html?default=French
, il DOM diventerebbe:
Select your language:
<select>
<OPTION value=1>French</OPTION>
<OPTION value=2>English</OPTION>
</select>
Significa che il tuo browser considera la pagina web come quella che è stata inviata sopra la rete una volta eseguita la javascript di modifica DOM (le chiamate a document.write
).
Ora un abile attaccante invia un link (via email / link alla pagina web) che una vittima fa clic indicando http://www.some.site/page.html?default=<script>alert(document.cookie)</script>
. Quindi la pagina web sulla pagina (dopo aver elaborato il javascript iniziale con document.write
) ha il seguente aspetto:
Select your language:
<select>
<OPTION value=1><script>alert(document.cookie)</script></OPTION>
<OPTION value=2>English</OPTION>
</select>
Ancora alert(document.cookie)
potrebbe essere qualunque javascript arbitrario voglia l'attaccante.
Forse c'è un nome utente / password segreta o un cookie di sessione o un numero di carta di credito sulla pagina, e invece di allarmi leghi premendo il pulsante di invio per una chiamata Ajax in modo che quando l'utente preme Invia, invia tutti i dati segreti a un server a cui l'utente malintenzionato può accedere.
Non c'è davvero uno scenario nel peggiore dei casi - qualsiasi azione tu possa fare con javascript che dovresti essere in grado di fare se esiste una vulnerabilità DOM-XSS.