很久以前我读过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>
答案 0 :(得分:1)
对此最好的解决方案可能是确保您的服务器PHP是最新的。我喜欢使用5.5.21作为其最新的完整版本,任何上面的版本都可用,但没有正确“发布”。如果您担心任何可能的漏洞,请阅读php.net的最新消息并搜索他们提到的一些特定CVE。这些是对已修补的漏洞的引用。