2012-02-02 52 views
0

我在閱讀關於PHP安全性的這些日子,我很頭暈,請解釋清楚!Strip_tags或mysql_real_escape_string或php中的add_magic_quotes

我知道我應該使用strip_tags()htmlentities()進行XSS攻擊。但如果我需要一些HTML標籤,和博客文章一樣,我該怎麼做!?

但我應該在哪裏使用mysql_real_escape_string()add_magic_quotes()? 是一樣的嗎?

另一個問題是,我應該爲每個SQL查詢使用mysql_real_escape_string()嗎? (INSERT,UPDATE,SELECT,DELETE等)?這個功能對我的數據有沒有影響(例如,在有html標籤的博客文章或',"")?

+0

add_magic_quotes不是內置的PHP函數。 – GordonM 2012-02-02 16:59:30

+0

'strip_tags()'被認爲是安全方法,負責在互聯網上發生如此多的損壞評論... – 2012-02-02 17:03:16

+0

哦,是的!我在這裏找到它:http://php.robm.me.uk/ – 2012-02-02 17:03:16

回答

1

我知道我應該使用strip_tags()htmlentities()進行XSS攻擊。但如果我需要一些HTML標籤,和博客文章一樣,我該怎麼做!?

如果您不信任用戶,請解析HTML,run all the elements and attributes through a whitelister,然後將文檔序列化回HTML。

但我應該在哪裏使用mysql_real_escape_string()和add_magic_quotes()?這些是一樣的嗎?

他們不一樣,一般來說,你應該避免它們。 Use bound parameters instead

另一個問題是,我應該爲每個SQL查詢使用mysql_real_escape_string()嗎?

在將數據傳遞給dabtas之前,您應該避開所有用戶輸入。

1

忘掉magic_quotes。這是一種懶惰的方式自動轉義用戶輸入內發現的某些控制字符。 Continue learningnewer and more efficient methods來過濾/清理用戶輸入,你會發現爲什麼magic_quotes has been deprecated

此功能對我的數據有不好的影響(例如,博客 有html標籤或',「」)的帖子?

您不應該有任何問題,因爲數據不會以額外的斜線存儲在數據庫中。如果是這樣,magic_quotes已啓用並需要關閉。

我應該爲每個SQL查詢使用mysql_real_escape_string()嗎?

用戶輸入在使用它進行查詢之前需要過濾/消毒。使用該功能,或準備報表。

+0

最後一個問題,是否足夠我使用mysql_real_escape_string()進行SQL注入? – 2012-02-02 17:59:19

+0

在大多數情況下,是的,使用它足以防止注射。但是,使用預準備語句更安全,因爲sql邏輯與提供的數據分離。 – shaunsantacruz 2012-02-02 18:11:07

+0

非常感謝。 – 2012-02-02 18:23:01

1

如果您需要在博客文章中允許HTML,您應該將標籤和屬性列入白名單,但您不應該自己嘗試。相反,使用HTMLPurifier。如果在存儲到數據庫之前使用它,因爲它很重且很慢,但非常安全。

http://htmlpurifier.org/

魔術引號不應該在所有使用。永遠。應該在查詢中提供的每個參數上使用mysql_real_escape_string()。這是防止SQL注入所需要的。當然,確保連接期望您實際發送的字符編碼是一個先決條件。

+0

最後一個問題,是否足夠我使用mysql_real_escape_string()進行SQL注入? – 2012-02-02 17:59:36

+0

更新了答案。基本上,是的。 – 2012-02-02 18:07:04

+0

謝謝先生;) – 2012-02-02 18:23:11

0

通用衛生功能的想法是一個破碎的概念。

對於各種目的,有一種正確的衛生方法。對字符串運行通用的衛生方法通常會破壞它 - 爲SQL查詢轉義一段HTML代碼將會破壞它以便在網頁中使用,反之亦然。衛生應正確使用數據之前應用:

mysql_real_escape_string() for functional mysql_* calls (or parametrized queries) 

htmlspecialchars() for safe HTML output 

preg_quote() for use in a regular expression 

escapeshellarg()/escapeshellcmd() for use in an external command 

etc. etc. 

使用「一刀切」的衛生功能就像使用5種高毒農藥的植物上,可以通過定義只包含一種錯誤的 - 只是發現你的植物受到第六類的侵染,其中沒有一種殺蟲劑起作用。

始終使用這一個正確的方法,理想情況下在將數據傳遞給函數之前是筆直的。除非需要,否則千萬不要混用方法。

相關問題