我正在試驗創建評論系統。我正在使用php-OEmbed類和HTML Purifier。我可以使用什麼過濾器來確保評論可以安全地插入到我的數據庫中?我知道你可以使用諸如FILTER_SANITIZE_STRING之類的PHP過濾器,但是不會將HTML變成實體嗎?確保評論安全
另外,如果您使用類似WMD editor之類的東西,那麼您是否還必須在客戶端使用某些東西(如PHP Markdown)以確保它是安全的?
我正在試驗創建評論系統。我正在使用php-OEmbed類和HTML Purifier。我可以使用什麼過濾器來確保評論可以安全地插入到我的數據庫中?我知道你可以使用諸如FILTER_SANITIZE_STRING之類的PHP過濾器,但是不會將HTML變成實體嗎?確保評論安全
另外,如果您使用類似WMD editor之類的東西,那麼您是否還必須在客戶端使用某些東西(如PHP Markdown)以確保它是安全的?
基本上你需要清理用戶輸入,無論你何時發送它。
當你把它放到你的數據庫中時,你需要通過引用SQL特殊字符來防止SQL注入(預處理語句會爲你做這件事)。當你將它發送到瀏覽器時,你需要轉義HTML特殊字符(PHP有這樣做的功能)以防止腳本注入。
也可能有其他地方需要轉義特殊字符。例如,如果您將註釋發送到服務器上的Bash腳本以執行某種處理。在這種情況下,您需要引用或轉義Bash特定的特殊字符。
重要的是不要在錯誤的階段引用/轉義:例如,除非您完全確定自己在做什麼,否則在將其放入數據庫時不要轉義HTML實體。如果數據庫連接失敗時發送錯誤消息(這可能會導致XSS漏洞),將數據從數據庫中拉出並準備將其發送到瀏覽器時,或者在發送錯誤消息時根本無法轉義)。在最後時刻逃脫,你很可能會避免這些陷阱。
您不需要爲SQL注入使用任何過濾器。最好的解決方案是使用prepared statements。例如,PDO提供PDOStatement。
我忘了添加,我使用的是基於PDO的redbean。 – jonnnnnnnnnie 2010-12-05 02:32:01