2015-11-30 12 views
1

有人告訴我,從我的數據庫輸出是雙重逸出基於作爲' " <使用htmlspecialchars進行輸入是多餘的,然後在輸出上使用htmlentities?

所以輸出等,是htmlspecialchars($content_to_escape, ENT_QUOTES)插入,然後echo htmlentities($content_to_echo);多餘的?

+6

當你把它放入數據庫時​​,你不需要轉義html(減去通常的sql注入保護)。這種轉義只能在OUTPUT上進行,因爲所使用轉義的目的(和類型)完全取決於輸出如何被使用。例如如果html永遠不會以可以呈現爲html的方式使用,那麼在進行html轉義時就沒有用處。 –

+0

如果你把它放到數據庫中,你不應該使用'htmlspecialchars()'。你應該使用PDO來處理正確的加載。你仍然需要在輸出中進行消毒。 –

+0

我正在使用PDO,綁定參數。所以不要逃避數據庫,逃避。 – janicehoplin

回答

1

將輸入存儲在數據庫中,如給定。

或者,您可以驗證輸入服務器端禁止某些字符。例如,對於街道名稱,您可能只允許使用字母數字和-,<space>'字符。

但是,爲了防止XSS焦點應該在輸出編碼。每次輸出都使用HTML編碼函數。當您需要輸出到另一個上下文(例如,用於JavaScript的十六進制實體編碼,JSON編碼等)時,將原始輸入存儲在數據庫中會使事情變得更加簡單(因而更加安全)。

+0

我決定使用htmlspecialchars($ content,ENT_QUOTES,'UTF-8');你對那個怎麼想的? – janicehoplin

相關問題