嵌入在脚本元素中时,php的json_encode()是否容易受到攻击?

时间:2014-04-23 14:14:32

标签: javascript php xss json

很久以前我读过OWASP's XSS Prevention Cheat Sheet并且默认包含JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP的包装函数,所以我会安全的。或者我想,直到Freenode / ## php的用户告诉我这是不安全的。 OWASP显然是说把JSON放到一个元素中,让javascript抓住它的内容,并解析它。

这是我能想到的最糟糕的事情,json_encode()仍然让它变得安全。任何人都可以想到一个可以突破的字符串吗?

Source:
<script>//<![CDATA[
    window.data=<?php echo json_encode(
        "]]>\"'</script><script>alert(document.cookie)</script>"
        ,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP
    );?>;
//]]></script>

Output:
<script>//<![CDATA[
    window.data="]]\u003E\u0022\u0027\u003C\/script\u003E\u003Cscript\u003Ealert(document.cookie)\u003C\/script\u003E";
/*]]></script>

1 个答案:

答案 0 :(得分:1)

对此最好的解决方案可能是确保您的服务器PHP是最新的。我喜欢使用5.5.21作为其最新的完整版本,任何上面的版本都可用,但没有正确“发布”。如果您担心任何可能的漏洞,请阅读php.net的最新消息并搜索他们提到的一些特定CVE。这些是对已修补的漏洞的引用。