首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript字符串是否需要“转义”字符"<“和">”?

javascript字符串是否需要“转义”字符"<“和">”?
EN

Stack Overflow用户
提问于 2009-04-23 01:27:42
回答 3查看 13.2K关注 0票数 17

有时,服务器端会生成嵌入到内联JavaScript代码中的字符串。例如,如果"UserName“应该由ASP.NET生成,那么它看起来就像。

代码语言:javascript
运行
复制
<script>
   var username = "<%UserName%>";
</script>

这是不安全的,因为用户的名字可以是

</script><script>alert('bug')</script></script>

这是XSS漏洞。

所以,基本上,代码应该是:

代码语言:javascript
运行
复制
<script>
   var username = "<% JavascriptEncode(UserName)%>";
</script>

JavascriptEncode所做的是在"/“、"'”和“”之前添加字符"\“,因此,输出的html类似于. var username = "alert(\'bug\')";

浏览器不会将"“解释为脚本块的末尾。因此,避免了XSS。

但是,仍然有"<“和">”。建议同时对这两个字符进行转义。首先,我不认为把"<“改成"<”,把">“改成">”是个好主意。而且,我不确定将"<“更改为"\<”和将">“更改为">”是否对所有浏览器都可识别。似乎没有必要对"<“和">”做进一步的编码。

对此有什么建议吗?

谢谢。

EN

Stack Overflow用户

发布于 2009-10-02 19:11:40

便宜而简单的方法:

代码语言:javascript
运行
复制
<script type="text/javascript">
    var username = "<%= Encode(UserName) %>";
</script>

其中,Encode中的编码方案是将输入的每个字符转换为与JavaScript兼容的相关\xABCD表示。

另一种既便宜又简单的方法:

代码语言:javascript
运行
复制
<script type="text/javascript">
    var username = decodeBase64("<%= EncodeBase64(UserName) %>");
</script>

如果您只处理ASCII。

当然,pst用严格的方式一针见血。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/779959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档