2011-05-06 29 views
0

希望這不是重複的,我無法找到關於該主題的原始問題。如果您有一個供用戶輸入數據的區域,那麼如何在不插入javascript或html的情況下存儲和檢索數據?如何防止服務器端PHP的html或JavaScript注入

舉個例子,假設一個用戶正在發表論壇帖子。他們決定編寫一個html列表或javascript函數,該函數在查看帖子時運行。當你在服務器端收到他們的輸入時,你如何緩解這種情況?特別是PHP的服務器端。

  • 根據模式刪除部分字符串數據?
  • 在他們的條目周圍使用html標籤嗎?

感謝

+0

請參閱http://stackoverflow.com/questions/223480/html-encode-user-input-when-storing-or-when-displaying和http://stackoverflow.com/questions/3129899/what-are- the-common-defenses-against-xss和http://stackoverflow.com/questions/34896/when-is-it-best-to-sanitize-user-input – 2011-05-06 04:16:35

+0

這些帖子都沒有回答如何在php – Spidy 2011-05-06 04:19:17

+0

PHP,你說? http://stackoverflow.com/questions/tagged/xss+php;因爲你沒有指定一個,所以我特別尋找語言不可知論的問題。 – 2011-05-06 04:23:06

回答

2

我使用HTML Purifier來去掉我不想要的位,並在我所做的位上留下。默認規則非常好,但如果您需要它,它提供了巨大的靈活性。

+0

這看起來像一個神奇的工具。我一定會試試 – Spidy 2011-05-06 04:27:04

2

您必須刪除或翻譯他們的崗位的違規部分。您可以在帖子進入時執行此操作,並將翻譯的帖子保存到數據庫中,或者每次顯示帖子時都可以執行此操作,並將原始帖子存儲在數據庫中。兩種方法都有其優點和缺點。

至於如何去除不好的東西,用簡單的匹配來代替所有的<和>與& lt;和& gt;還有很長的路要走 - 但除此之外還有很多事情要做。

+0

是否有項目需要替換以保護網站?它只是< and > – Spidy 2011-05-06 04:21:48

+0

還有什麼要做?如果你逃過了小於號的話,沒有HTML會通過。 – jpsimons 2011-05-06 04:22:25

+0

關於*何時執行此操作:我的首選項是存儲原始文章並在稍後的顯示中進行翻譯/編碼。但也許這是因爲我經常在其他數據(非HTML)目的可訪問的系統上工作。 – nnnnnn 2011-05-06 06:39:56

3

所有你需要做的,只是最低限度,取代<&lt;

2

有很多關於防止代碼注入的教程。微軟的相當全面found here

對於html注入取決於你想成爲多麼徹底你通常可以放在字符串解析器檢查<>並刪除它們,沒有給出的例外。

+0

它不是在PHP中,但肯定涵蓋的概念,謝謝 – Spidy 2011-05-06 04:24:38

+0

對不起,沒有看到你在PHP工作,但谷歌搜索「防止JavaScript的PHP注射」帶來了少數的SO鏈接,所以要放心那裏有很多信息。 – 2011-05-06 04:29:12