來源:不言 發(fā)布時間:2019-02-27 10:52:00 閱讀量:919
本篇文章將給大家介紹關(guān)于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驅(qū)動程序防止SQL注入的方法。下面我們來看具體的內(nèi)容。
簡單的SQL注入示例
例如,A有一個銀行網(wǎng)站。已為銀行客戶提供了一個網(wǎng)絡(luò)界面,以查看其帳號和余額。您的銀行網(wǎng)站使用http://example.com/get_account_details.php?account_id=102等網(wǎng)址從數(shù)據(jù)庫中提取詳細信息。
例如,get_account_details.php的代碼如下所示。
1 2 |
|
客戶accountId通過查詢字符串作為account_id傳遞。與上面的Url一樣,如果用戶的帳戶ID為102并且它在查詢字符串中傳遞。Php腳本將創(chuàng)建如下所示的查詢。
1 |
|
accountId 102獲取accountNumber和余額詳細信息,并提供給客戶。
我們假設(shè)另一個場景,智能客戶已經(jīng)通過了account_id,就像0 OR 1=1查詢字符串一樣?,F(xiàn)在會發(fā)生什么?PHP腳本將創(chuàng)建如下所示的查詢并在數(shù)據(jù)庫上執(zhí)行。
1 |
|
查看由腳本和數(shù)據(jù)庫返回的結(jié)果創(chuàng)建的查詢。您可以看到此查詢返回了所有帳號和可用余額。
這稱為SQL注入。這是一個簡單的方式,其實可以有很多方法來進行SQL注入。下面我們就來看一下如何使用PHP MySQLi驅(qū)動程序和PHP PDO驅(qū)動程序防止SQL注入。
使用PHP-MySQLi驅(qū)動程序
可以使用PHP-MySQLi驅(qū)動程序預(yù)處理語句來避免這些類型的SQL注入。
PHP防止SQL注入的代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
使用PHP-PDO驅(qū)動程序
可以使用PHP-PDO驅(qū)動程序prepare語句來避免這些類型的SQL注入。
PHP解決上面的SQL注入問題的代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|