2012-03-03 31 views
4
工作

$this->input->post('question', TRUE)XSS_CLEAN不笨

如果連我添加TRUE,它仍然允許人們添加HTML代碼。這是爲什麼?

回答

5

xss_clean()函數不會刪除全部 HTML會刪除/替換被認爲危險的特定事物,如<script>標記。

http://codeigniter.com/user_guide/libraries/security.html

的XSS過濾器會查找常用技術來觸發JavaScript或其他類型的代碼試圖劫持cookie或做其他惡意行爲。如果遇到任何不允許的情況,則通過將數據轉換爲字符實體來使其變得安全。

有人在您的頁面注入<p>標記,雖然可能不需要,但並不是真正有效的攻擊。你必須指定你想要用它做什麼。在很多情況下,你會想要 HTML輸出已被xss_clean()編輯。

這聽起來像你想htmlspecialchars()strip_tags()(注意:這兩個非常不同的東西)。如果您想編碼的HTML,你也可以使用CI的html_escape()

echo html_escape($this->input->post('question')); 

如果你想HTML輸出,而不是實體,只是本身使用XSS過濾器:

echo $this->input->post('question', TRUE); 
echo xss_clean($user_input); 
+0

所以,如果我添加html_escape,我想我不需要添加TRUE,對吧? – 2012-03-03 22:28:28

+1

嘿,是的好點。我不是XSS攻擊方面的專家,我不能評論CI的過濾器是多麼健壯,但我確實相信對於編碼而言,'html_escape()'就足夠了。如果你想要有實際的HTML輸出,但是需要''xss_clean()'''',但是要過濾掉潛在的危險部分。 – 2012-03-03 22:32:10

+1

查看關於'xss_clean()'的這篇文章:http://stackoverflow.com/a/5346696/398242請記住,轉義/編碼輸出始終依賴於上下文相關 - 沒有一個工具可以處理每個作業保證你的安全。 – 2012-03-03 22:38:52