PHP防SQL注入的方法

2021-05-07 22:30:16 字數 1873 閱讀 8607

php防sql注入的方法

sql注入攻擊是黑客攻擊**最常用的手段。如果你的站點沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到sql注入攻擊。sql注入攻擊通常通過給站點資料庫提交不良的資料或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。下面來談談sql注入攻擊是如何實現的,又如何防範。

看這個例子:

// supposed input

$name = 「ilia』; delete from users;」;

mysql_query(「select * from users where name=』』」);

很明顯最後資料庫執行的命令是:

select * from users where name=ilia; delete from users

這就給資料庫帶來了災難性的後果--所有記錄都被刪除了。不過如果你使用的資料庫是mysql,那麼還好,mysql_query()函式不允許直接執行這樣的操作(不能單行進行多個語句操作),所以你可以放心。如果你使用的資料庫是sqlite或者postgresql,支援這樣的語句,那麼就將面臨滅頂之災了。

上面提到,sql注入主要是提交不安全的資料給資料庫來達到攻擊目的。為了防止sql注入攻擊,php自帶乙個功能可以對輸入的字串進行處理,可以在較底層對輸入進行安全上的初步處理,也即magic quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc選項啟用,那麼輸入的字串中的單引號,雙引號和其它一些字元前將會被自動加上反斜槓/。

但magic quotes並不是乙個很通用的解決方案,沒能遮蔽所有有潛在危險的字元,並且在許多伺服器上magic quotes並沒有被啟用。所以,我們還需要使用其它多種方法來防止sql注入。許多資料庫本身就提供這種輸入資料處理功能。例如php的mysql操作函式中有乙個叫mysql_real_escape_string()的函式,可將特殊字元和可能引起資料庫操作出錯的字元轉義。

看這段**:

//如果magic quotes功用啟用

if (get_magic_quotes_gpc()) else

mysql_query(「select * from users where name=』』」);

注意,在我們使用資料庫所帶的功能之前要判斷一下magic quotes是否開啟,就像上例中那樣,否則兩次重複處理就會出錯。如果mq已啟用,我們要把加上的/去掉才得到真實資料。除了對以上字串形式的資料進行預處理之外,儲存binary資料到資料庫中時,也要注意進行預處理。否則資料可能與資料庫自身的儲存格式相衝突,引起資料庫崩潰,資料記錄丟失,甚至丟失整個庫的資料。有些資料庫如postgresql,提供乙個專門用來編碼二進位制資料的函式pg_escape_bytea(),它可以對資料進行類似於base64那樣的編碼。

如:// for plain-text data use:

pg_escape_string($regular_strings);

// for binary data use:

pg_escape_bytea($binary_data);

另一種情況下,我們也要採用這樣的機制。那就是資料庫系統本身不支援的多位元組語言如中文,日語等。其中有些的ascii範圍和二進位制資料的範圍重疊。不過對資料進行編碼將有可能導致像like abc% 這樣的查詢語句失效。 

以下是一段copy來的**:

php**

$_post = sql_injection($_post);  

$_get = sql_injection($_get);  

function sql_injection($content)  

} else   

}  

return $content;  

}  

做系統的話,可以用下面的**,也是copy來的。

PHP防SQL注入

php防sql注入攻擊 收藏 沒有太多的過濾,主要是針對php和mysql的組合。一般性的防注入,只要使用php的 addslashes 函式就可以了。以下是一段copy來的 php post sql injection post get sql injection get function sql...

PHP防SQL注入

php防sql注入攻擊 收藏 沒有太多的過濾,主要是針對php和mysql的組合。一般性的防注入,只要使用php的 addslashes 函式就可以了。以下是一段copy來的 php post sql injection post get sql injection get function sql...

防sql注入方法

一 什麼是sql注入 sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug進行攻擊,而是通過程式設計 的疏漏,通過編寫特定的sql語句,進行資料庫的非法訪問。二 sql注入流程 尋找sql注入位置 判斷伺服器型別和後台資料型別 針對不同的伺服器和資料庫特點進行sql注入 三 防sql注...