Javascript替代连接技术

时间:2014-06-22 10:57:41

标签: javascript html5 xss

也许我的问题是noobish但我在互联网上找不到任何答案。

 <script>

    var1 = "";
    someFuntion();
    var2 = "";

</script>

假设我有一个这样的脚本,我可以通过输入字符串来更改var1值。 当我输入此有效负载&#34; / alert(9)/&#34;到var1脚本变成这样:

<script>

    asd = ""/alert(9)/"";
    qwe();
    zxc = "";

</script>

当浏览器呈现html时,它会执行alert()并弹出窗口。还有不同的有效载荷,如&#34; | alert(9)|&#34;,&#34;!= alert(9)!=&#34; ,&#34 ;; alert(9); //浏览器仍会创建弹出窗口。

有人可以解释这是怎么可能的,在注入我已经显示的有效载荷后,脚本的含义是什么?

请描述一下改变后的脚本的解剖结构,即asd变量变为什么,alert()的左右连接意义是什么意思。

1 个答案:

答案 0 :(得分:2)

这个

asd = ""/alert(9)/"";

表示取一个空字符串,除以alert(9)个返回值,将其除以空字符串并将结果赋值给asd。由于JS是弱类型的,因此对字符串执行除法没有问题 - 它只返回NaN。作为副作用,您会看到警报。

在脚本中注入用户输入是一个可怕的想法,但如果必须,你应该逃避字符串以避免这样的黑客攻击。最安全的方法是通过JSON.stringify

运行它们
userInput = '"/alert(9)/"'
safeExpr = JSON.stringify(userInput)
someJSCode = "var asd = " + safeExpr

给你

var asd="\"/alert(9)/\""