有时,服务器端将生成字符串以嵌入内联JavaScript代码。例如,如果ASP.NET应生成“UserName”,则如下所示。
<script>
var username = "<%UserName%>";
</script>
这并不安全,因为用户可以将自己的名称设置为
</script><script>alert('bug')</script></script>
这是一种跨站脚本漏洞(XSS漏洞)。
所以,基本上代码应该是:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
JavascriptEncode会在"/"、 "'" 和 """之前添加字符"\", 从而使输出的 HTML 看起来像这样。var username = "</script>alert(\'bug\')</script></script>";
浏览器不会将 "< / script >" 解释为脚本块的结束。因此,可以避免 XSS 攻击。
然而,"<"和">"仍然存在。建议同样转义这两个字符。首先,我认为在此处将"<"更改为"<",将 ">"更改为 ">" 不是一个好主意。而且,我不确定将"<"更改为 "\<",将">"更改为 "\>" 是否能被所有浏览器识别。似乎没有必要进一步对"<"和">"进行编码。
对此有何建议?
谢谢。
]]>
дёӯзҡ„>
д»Қ然еҝ…йЎ»жӣҝжҚўдёә>
гҖӮ еӣ жӯӨпјҢfoo [bar [0]]> 1234
еҝ…йЎ»жӣҝжҚўдёәfoo [bar [0]]<1234
жҲ–foo [bar [0]]> 1234
гҖӮеҗҰеҲҷпјҢCDATAеқ—е°ҶиҝҮж—©е…ій—ӯгҖӮ - Gumbofoo[bar[0]] > 1234
- 或者如果它是字符串的一部分:'foo[bar[0]]'+'>1234'
- 或者只需将所有脚本包含在外部的.js文件中。 - gnarf