有时,服务器端会生成嵌入到内联JavaScript代码中的字符串。例如,如果"UserName“应该由ASP.NET生成,那么它看起来就像。
<script>
   var username = "<%UserName%>";
</script>这是不安全的,因为用户的名字可以是
</script><script>alert('bug')</script></script>
这是XSS漏洞。
所以,基本上,代码应该是:
<script>
   var username = "<% JavascriptEncode(UserName)%>";
</script>JavascriptEncode所做的是在"/“、"'”和“”之前添加字符"\“,因此,输出的html类似于. var username = "alert(\'bug\')";
浏览器不会将"“解释为脚本块的末尾。因此,避免了XSS。
但是,仍然有"<“和">”。建议同时对这两个字符进行转义。首先,我不认为把"<“改成"<”,把">“改成">”是个好主意。而且,我不确定将"<“更改为"\<”和将">“更改为">”是否对所有浏览器都可识别。似乎没有必要对"<“和">”做进一步的编码。
对此有什么建议吗?
谢谢。
发布于 2009-10-02 19:11:40
便宜而简单的方法:
<script type="text/javascript">
    var username = "<%= Encode(UserName) %>";
</script>其中,Encode中的编码方案是将输入的每个字符转换为与JavaScript兼容的相关\xABCD表示。
另一种既便宜又简单的方法:
<script type="text/javascript">
    var username = decodeBase64("<%= EncodeBase64(UserName) %>");
</script>如果您只处理ASCII。
当然,pst用严格的方式一针见血。
https://stackoverflow.com/questions/779959
复制相似问题