2011-08-30 83 views
4

我帶$ _POST信息並將其存儲在數據庫中,稍後進行查詢並將此信息打印給用戶。我應該在插入這個信息之前使用htmlspecialchars(),還是在輸出它之前查詢它?htmlspecialchars()應該用於輸入信息還是輸出前?

此外,我需要用戶有能力使用引號和其他日常特殊字符的能力。我知道我可以使用ENT_NOQUES標誌,但感覺就像我這樣做會留下安全漏洞。

我的網站允許設置高亮,我希望用戶能夠日常使用的字符,而不必查看「放大器; LT; & LT ;? & GT; &」。

耐心與我< --- noob被鼓勵! 感謝:d

+0

只是在輸出前 – dynamic

+1

[防止xss攻擊的更好的方法]的副本(http://stackoverflow.com/questions/6484493/better-way-preventing-xss-attack)(我支持[我的回答](http ://stackoverflow.com/questions/6484493/better-way-preventing-xss-attack)在那裏,雖然它的評分爲-1)。 – phihag

+1

更好使用strip_tags輸入http://php.net/manual/en/function.strip-tags.php –

回答

7

我應該使用插入此信息或之後I I輸出前查詢之前用htmlspecialchars()?

在插入目標代碼之前轉義數據。即在你輸出之前。

這意味着你將保持數據的原始形式用於其他目的(如向用戶輸出進行編輯,包括電子郵件,生成PDF,搜索等)

另外我需要用戶有能力使用引號和其他日常特殊字符的能力。我知道我可以使用ENT_NOQUES標誌,但感覺就像我這樣做會留下安全漏洞。

htmlspecialchars()會將輸入數據中的引號轉換爲HTML。所以你不需要做任何特別的事情。

我的網站允許設置高亮

然後,你需要有一個適當的BBCode解析器。

+0

感謝您的快速回答! – KRB

+1

在將它存儲到數據庫中之前,先輸出它,而不是在做之前做到這一點非常重要。 有三個原因: 1.正如Quentin的評論所述,您可能想要在別處使用數據(而不是HTML)。可能是RIA或移動應用程序。 2.輸出時,您需要根據上下文進行轉義。作爲一個例子,如果你在像onclick這樣的事件處理程序中輸出JavaScript字符串內的數據,htmlspecialchars將無法保護你。 3.如果在轉義例程中存在錯誤,您可能會錯誤地轉義數據庫中的數據。可能是一個真正的痛苦後來修復。 – Erlend

1

htmlspecialchars()在輸出之前使用以避免XSS。數據庫應該更好地保存用戶的原始輸入。

相關問題