2013-12-08 60 views
0

我有一个博客系统,随机的人可以发表评论。如果淘气人尝试后的Javascript,会出现这种情况:PHP网站防止XSS有点太好

bla bla <script>alert("Hacked")</script> 

假作

bla bla &lt;script&gt;alert(&quot;Hacked&quot;)&lt;/script&gt; 

我宁愿后保持代码不变,只是曾经有人需要发布HTML情况。我如何让第二条线看起来像第一条线,而没有它真的做任何事情?目前的办法,我将其过滤是:

$safeMessage = htmlspecialchars($reply['message'], ENT_QUOTES | ENT_HTML401, 'UTF-8'); 

echo "$safeMessage"; 
+4

咦?你这样做的方式恰恰是正确的方法 - 当在浏览器中显示时,它应该显示''你能澄清哪里出了问题? –

+0

你的意思是“保持代码完好?”根据定义,您不能同时过滤掉可能不安全的HTML字符并允许它们通过。如果你的意思是简单地显示它,所以它显示实际的HTML(不是呈现的HTML),那么你现在拥有什么错误? –

+0

也许你曾经编码过它(到第二行),然后将元素的'.textContent'(jQ中的'.text')设置为它?无论如何,使用'.textContent'转义代码。 –

回答

0

我能想到的最好的办法就是使用HTML Purifier并只能指定要允许HTML的一个子集。检查文件here