【问题标题】:JSON in javascript block, insecure or merely an anti-pattern?javascript块中的JSON,不安全还是仅仅是一种反模式?
【发布时间】: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


【解决方案1】:

考虑以下几点:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2020-03-14
    • 1970-01-01
    • 2022-10-13
    • 2013-03-11
    相关资源
    最近更新 更多