2012-08-15 66 views
2

我正在研究Codeigniter中的評論系統,並希望得到關於我應該採用哪種驗證規則的建議。我不想讓任何圖像或其他任何HTML。對評論表格的驗證

到目前爲止,我只有trimmax_length設置。在插入數據庫之前,我還通過htmlspecialchars運行內容。我在全球啓用了XSS篩選。

我應該採取哪些其他預防措施? htmlspecialchars是否足以阻止Javascript或其他惡意代碼被輸入?

+2

在將其放入數據庫之前,您不應該通過'htmlspecialchars'運行它。轉義時,應該在最後一刻執行此操作,以便數據可用於其他目的。在這種情況下,當您將其輸出到頁面時,您應該使用'htmlspecialchars'。 – 2012-08-15 18:13:48

+0

如果您根本不想使用HTML,請在輸入中使用'strip_tags'。 – 2012-08-15 18:17:06

回答

3

你應該在required和max_length上做一個常規的form validation,而且在把東西推送到數據庫之前顯然應該進行xss過濾。 htmlspecialchars應該只適用於不在標籤中的字符,所以你不能直接做htmlspecialchars。您需要:

1 - 剝去標籤元素(和存儲他們)像「<br/>」或「<b>」,但不是他們的內容,這意味着裏面的「<b>」和「</b>」沒什麼。你可以用preg_match來做到這一點。

2 - 執行對所有剩餘的文本

3ヶ輛 - 除去所有不需要明確的標籤(從標籤所存儲的一束)

strip_tags (string $str [, string $allowable_tags ]) 

4 - 然後篩選屬性和內容所允許的標籤。它的情況並不少見黑客使用如下代碼

<b onMouseOver="window.open(..)"></b> 

爲了解決這個問題,要麼你就必須做額外的工作一點點,可能與一些正則表達式-ES工作。如果你想讓我寫更多的示例代碼,請告訴我。

6 - 將標記元素重新添加回文檔。

我只是現在基本上熟了。該算法的效率可以得到提高(即首先去除不需要的標籤,然後繼續過濾html實體和標籤內容),但我會留給你。

就我現在可以看到潛在的黑客行爲而言。儘管可能有其他方法來破解你的輸入,所以你可能想要檢查其他評論框系統用於驗證,例如phpbb forum system。另一種選擇可能是使用phpbb方括號格式來處理標籤,因此您不要讓用戶輸入任何html標籤,而是使用您控制的方括號標籤。

這是回答您的問題嗎?

+0

是的,這是一個非常好的答案。我一直在研究HTMLPurifier,我認爲這將有助於正確處理標籤。 – Motive 2012-08-15 23:30:07