0

我正在阅读OWASP XSS 预防备忘单,并注意到它认为以下代码是反模式。

<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 的实际机会?似乎 PHPjson_encode()应该正确地进行所有必要的转义,以便将其转换为有效的 JSON 对象,而 JSON 是 Javascript 的一个足够接近的子集,只要您转义 U+2028 和 U +2029。

4

1 回答 1

0

考虑以下:

<script>
var data = {"name":"</script><script>alert(1)//"}
</script>

这是有效的 json,但是因为文档首先被解析为 HTML,所以 json 会中断并执行 alert(1)。

于 2013-10-24T21:39:36.540 回答