网站搜索

XSS:使用 PHP 的 json_encode 创建一个 JavaScript 对象


这对 XSS 是百分之百安全吗?如果不是,您能否提供一个示例不良字符串文本,向我展示为什么它不是安全的。

<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.

答案#1

简而言之,这是安全的。可能的 XSS 需要从 JavaScript 字符串(")或脚本(</script>)中进行转义。这两个字符串都已正确转义:

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

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

答案#2

绝对不!!!

不要使用 json_encode 来转义 JavaScript。

例如:

json_encode<img src=# onerror=alert(1)>,这不会转义任何东西并输出到浏览器。这是一个 XSS。

请改用 htmlspecialchars。