2010-11-13 51 views
7

在PHP手冊,還有一張紙條:mysql_real_escape_string足以支持反SQL注入嗎?

注意:如果這個功能不是用來 逃生數據,查詢很容易受到 SQL注入式攻擊。

這是否足以防SQL注入?如果沒有,你能舉一個例子和一個很好的解決方案來反SQL注入?

+1

請參閱[mysql_real_escape_string()是否完全防範SQL注入? ](http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection)。 – 2010-11-13 05:31:33

+0

絕對是以上的副本 – mikeycgto 2011-06-30 03:45:39

回答

6

mysql_real_escape_string通常足以避免SQL注入。這取決於它是否是無缺陷的,也就是說它有一些未知的機會,它很容易受到攻擊(但這在現實世界中還沒有表現出來)。完全排除概念層面的SQL注入的更好的替代方法是prepared statements。這兩種方法完全取決於你正確應用它們;即使你只是簡單地搞亂了它們,也不會保護你。

+1

中找到,只是爲了說明:PDO也可能模擬準備好的查詢(對於mysql)並且不使用本機mysql。在php文檔中沒有這樣的聲明(或者我找不到一個)。 – zerkms 2010-11-13 06:49:10

+0

「PDO將模擬不支持它們的驅動程序」---是不夠的,因爲:a)安裝的(舊的)libmysql不能支持準備; b)PDO仍然不能使用本地準備的語句。 – zerkms 2010-11-13 06:51:54

0

據我所知,這是避免SQL注入攻擊的可靠方法。

+0

抱歉忘了補充,我認爲你可以從網址進行攻擊。 – mcbeav 2010-11-13 05:29:47

+0

您也可以始終限制誰可以訪問數據庫上的內容以及誰擁有什麼權限。 – mcbeav 2010-11-13 05:31:27

0

最好的解決方案是PDO

如果您使用的是傳統mysql_query,那麼通過mysql_real_escape_string()運行所有數據就足夠了。

+0

什麼是參數化查詢? – Jichao 2010-11-13 05:31:54

+0

參數化查詢也可以在PDO擴展 – stillstanding 2010-11-13 05:32:18

相關問題