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

时间:2011-05-06 15:22:02

标签: php javascript xss json

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

绝对不是!!!

不要使用json_encode来逃避javascript。

例如:

json_encode <img src=# onerror=alert(1)>,这将逃避任何事情并输出到浏览器。这是一个xss。

使用htmlspecialchars代替。