2013-12-08 61 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