"吗?-6ren"> "吗?-有时,服务器端会生成要嵌入到内联 JavaScript 代码中的字符串。例如,如果“UserName”应该由 ASP.NET 生成。然后看起来像。 var username = ""; 这是-6ren">
gpt4 book ai didi

javascript - javascript字符串需要 "escape"字符 "<"和 ">"吗?

转载 作者:技术小花猫 更新时间:2023-10-29 12:10:08 26 4
gpt4 key购买 nike

有时,服务器端会生成要嵌入到内联 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 = "</script>alert(\'bug\')</script></script>";

浏览器不会将“</script>”解释为脚本 block 的结尾。因此,避免了 XSS。

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

对此有什么建议吗?

谢谢。

最佳答案

根据您使用的标记语言,问题有不同的答案。

如果您使用的是 HTML,则不得使用实体表示它们,因为脚本元素被标记为包含 CDATA。

如果您正在使用 XHTML,那么您可以将它们表示为带有显式 CDATA 标记的 CDATA,或者您可以使用实体表示它们。

如果您正在使用 XHTML,但将其作为 text/html 提供,那么您需要编写一些符合 XHTML 规则但仍可用于 text/html 解析器的内容。这通常意味着使用明确的 CDATA 标记并在 JavaScript 中将其注释掉。

<script type="text/javascript">
// <![CDATA[

// ]]>
</script>

不久前,我写了一些关于 the hows and whys of this 的文章.

关于javascript - javascript字符串需要 "escape"字符 "<"和 ">"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com