所謂SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。php
SQL注入原理:mysql
web架構一般爲三層:
web
表示層、邏輯層、存儲層sql
SQL注入過程:數據庫
轉義字符處理不當服務器
// 構造動態SQL語句cookie
$sql = "select * from tbl where field = '$_GET['input']'";架構
// 執行SQL語句post
$res = mysql_query($sql);測試
測試:
在下邊的網址後邊加一個單引號,就會報數據庫錯誤
http://testphp.vulnweb.com/artists.php?artist=1
2.類型處理不當
// 構造動態SQL語句
$sql = "select * from tbl where field = $_GET['user_id']";
// 執行SQL語句
$res = mysql_query($sql);
Mysql內置了一個命令,能夠讀取文件
* Union all select load_file('/etc/passwd')--
select * from tbl where userid = 1 union all select load_file('etc/passwd')--
該命令會獲取數據庫管理員的密碼
3.查詢語句組織不當
user.php?table=user&
4.錯誤處理不當
即將站點的錯誤信息暴漏給用戶,這樣很是危險。
// 構造動態查詢語句
$getid = "select * from tbl where userid > 1";
// 執行SQL語句
$res = mysql_query($getid) or die('<pre>'.mysql_error().'</pre>');
5.多個提交處理不當
// 參數是不是一個字符串
if(is_string($_GET["param"])){}
問題:
1.若是web站點禁止輸入單引號字符,是否能夠避免SQL注入?
尋找SQL注入的方法:
經過get請求
經過post請求
其餘http請求,如cookie