【发布时间】:2013-10-24 15:11:23
【问题描述】:
我正在阅读OWASP XSS prevention cheat sheet 并注意到它认为以下代码是反模式。
<script>
var initData = <%= data.to_json %>; // Do NOT do this without encoding the data with one of the techniques listed below.
</script>
它建议的替代方案是这样的:
<script id="init_data" type="application/json">
<%= html_escape(data.to_json) %>
</script>
...然后在您的 javascript 文件中:
var dataElement = document.getElementById('init_data');
var jsonText = dataElement.textContent || dataElement.innerText // unescapes the content of the span
var initData = JSON.parse(jsonText);
但是,备忘单并没有说明原始代码有什么问题。它仅仅是一种反模式,还是存在 XSS 的实际机会?似乎 PHP 的 json_encode() 应该正确地进行所有必要的转义,以便将其转换为有效的 JSON 对象,而 JSON 是 Javascript 的一个足够接近的子集,只要你转义 U+,它就应该工作2028 和 U+2029。
【问题讨论】:
-
如果你正确编码它就可以了。
标签: javascript php json xss