有时,服务器端会生成嵌入到内联 JavaScript 代码中的字符串。例如,如果“用户名”应该由 ASP.NET 生成。然后看起来像。
<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> ”解释为脚本块的结尾。所以,XSS 在避免。
但是,那里仍然有“<”和“>”。建议也转义这两个字符。首先,我不认为将“<”更改为“<”是一个好主意 和 ">" 到 ">" 这里。而且,我不确定将“<”更改为“\<”和将“>”更改为“\>”是否可以被所有浏览器识别。似乎没有必要对“<”和“>”进行进一步的编码。
对此有什么建议吗?
谢谢。