Questa pagina sta prendendo input da una fonte non affidabile e la trasmette direttamente nel browser come HTML.
In questo caso, la fonte non attendibile è window.name
. Per il programmatore inesperto, questo può sembrare innocuo, ma in realtà, può essere impostato su qualsiasi valore arbitrario, perché è derivato dal nome del frame:
<iframe
src="http://www.domxss.com/domxss/01_Basics/05_jquery_html.html?681973661#message"name="<script>alert(0)</script>"
></iframe>
Nel codice che hai fornito, c'è un altro buco abbagliante: il selettore è anche preso da una fonte non sicura (l'URL), che consente agli aggressori di produrre l'HTML in qualsiasi luogo desideri. Questo non ha bisogno di essere un frame, basta visitare il seguente URL:
http://www.domxss.com/domxss/01_Basics/05_jquery_html.html?681973661#whatever],body,[whatever
t
è impostato su "whatever],body,[whatever"
(da location.hash
) e viene utilizzato per costruire un selettore jQuery ( "div[id="+t+"]"
). Insieme, risulta in un selettore che seleziona (ad es.) L'elemento <body>
:
"div[id=whatever],body,[whatever]"
Sebbene non sia così dannoso come window.name
, potrebbe valere la pena di aggiustarlo.