为什么???
防御 Web 应用程序中的常见弱点。如果您在 HTML 页面中说,例如:
<script type="text/javascript">
var something = <%= @something.to_json.html_safe %>;
</script>
那么你可能会认为你很好,因为你已经对你注入 JavaScript 的数据进行了 JSON 转义。但实际上你并不安全:除了 JSON 语法之外,你还有 HTML 语法,并且在 HTML 脚本块</
中是带内信号。实际上,如果@something
包含字符串</script>
,您就会遇到跨站点脚本漏洞:
<script type="text/javascript">
var something = {"attack": "abc</script><script>alert('XSS');//"};
</script>
第一个脚本块在字符串的中途结束(留下未闭合的字符串文字语法错误),第二个<script>
脚本块被视为新的脚本块,并执行其中的潜在用户提交的内容。
JSON 不需要将<
字符转义为,但它是一种完全有效的替代方法,它会自动避免此类问题。\u003C
如果 JSON 解析器拒绝它,那是阅读器中的一个严重错误。
产生该错误的代码是什么?我不相信该错误与<
-转义有关,因为它谈论的是字节0xC3而不是0x3C。这可能表明一个带有 UTF-8 编码内容的字符串没有被标记为 UTF-8……也许你需要force_encoding("UTF-8")
在输入上加上一个?