【问题标题】:XSS : Creating a javascript object using PHP's json_encodeXSS:使用 PHP 的 json_encode 创建一个 javascript 对象
【发布时间】:2011-05-06 15:22:01
【问题描述】:

这对 XSS 是否 100% 安全? 如果不是,您能否提供示例错误字符串文本,告诉我为什么不是。

<html>
  <body>
    <script>
      <?php
        $bad = "some bad string.  please give example text that makes the below unsafe";
        echo "var a = ".json_encode($bad).";";
        echo "var b = ".json_encode(array($bad)).";";
      ?>
    </script>
  </body>
</html>

Thanks.

【问题讨论】:

  • 这有点取决于你最终用a 做什么,不是吗?
  • $bad 究竟来自哪里?这并不重要,因为json_encode 只创建有效的JSON,这是“不可执行的”。
  • @kevin, json_encode 创建有效的 json
  • @Neal,感谢您的更正。
  • 我主要担心 $bad 包含以某种方式执行的 javascript。根据下面 Lekensteyn 的回答,这似乎是不可能的,因此它是安全的。但是,如果有人能告诉我,那肯定会对我的系统造成冲击!

标签: php javascript xss json


【解决方案1】:

简而言之,它是安全的。可能的 XSS 需要从 javascript 字符串 (") 或脚本 (&lt;/script&gt;) 中转义。两个字符串都已正确转义:

"          becomes  \"
</script>  becomes  <\/script>

这是关于直接注入的部分。您的应用程序应该考虑到某些数组元素可能会丢失。另一种可能性是数组元素不是您期望的类型(例如,数组而不是字符串)

【讨论】:

    【解决方案2】:

    绝对不是!!!

    不要使用 json_encode 转义 javascript。

    例如:

    json_encode&lt;img src=# onerror=alert(1)&gt;,这不会转义并输出到浏览器。这是一个 xss。

    请改用htmlspecialchars

    【讨论】:

    • 这是正确答案。简而言之,大多数事情都不安全,这证明了这一点。
    • 在原始问题所涉及的 Javascript 上下文中使用它是否仍然安全,而不是在 HTML 上下文中使用?当然,htmlspecialchars() 在 HTML 上下文中是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多