Rails 3:
{"a" => "<br/>"}.to_json
=> "{\"a\":\"<br/>\"}"
Rails 4:
{"a" => "<br/>"}.to_json
=> "{\"a\":\"\\u003Cbr/\\u003E\"}"
WHY???
它似乎导致了错误
Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8
当我的 Rails 3 应用程序尝试解析由我的 Rails 4 应用程序生成的 JSON 时。
WHY???
防御 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>
被视为新的脚本块,并执行其中可能由用户提交的内容。
逃离<
字符到\u003C
JSON 不需要,但它是一个完全有效的替代方案,并且它会自动避免此类问题。如果 JSON 解析器拒绝它,这对读者来说是一个严重的错误。
产生该错误的代码是什么?我不相信这个错误与<
-转义,因为它谈论的是字节 0xC3 而不是 0x3C。这可能表明带有 UTF-8 编码内容的字符串未被标记为 UTF-8...也许您需要一个force_encoding("UTF-8")
在输入上?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)