web安全之SQL註入
阿新 • • 發佈:2018-07-11
password 嚴格 add code 數據 檢查 star 代碼 輸入數據 一、如何理解SQL註入?
- SQL註入是一種將SQL代碼添加到輸入參數中
- 傳遞到SQL服務器解析並執行的一種×××手法
二、SQL註入是怎麽產生的?
- WEB開發人員無法保證所有的輸入都已經過濾
- ×××者利用發送給SQL服務器的輸入數據構造可執行的SQL代碼
- 數據庫未做相應的安全配置
三、如何尋找SQL輸入漏洞?
==借助邏輯推理==
1. 識別web應用中所有輸入點
- GET數據
- POST數據
- HTTP頭信息
2. 了解哪些類型的請求會觸發異常
3. 檢測服務器響應中的異常
四、如何進行SQL註入×××?
1. 數字註入
- 使用 or 讓 where語句永遠為真:數字註入 id=-1 or 1=1
SELECT * FROM table WHERE id = -1 OR 1=1
2. 字符串註入
使用#或者--空格
- mysql註釋方式 #註釋
SELECT * FROM table WHERE name=‘name‘#‘ AND password = ‘123456‘
- mysql註釋方式 --空格 註釋
SELECT * FROM table WHERE name=‘name‘-- ‘ AND password = ‘123465‘
五、如何預防SQL註入?
1 嚴格檢查輸入變量的類型和格式
- 預先知道傳入的參數類型,根據參數類型判斷,可以防止某種類型的註入
- is_numeric(); 判斷字符串數字
- 使用正則表達式判斷字符串類型
2 過濾和轉義特殊字符
- 對特定字符進行轉義
使用php函數轉義特殊字符:
addslashes($name);
使用mysql函數轉義特殊字符:
mysqli_real_escape_string($db,$name);
3 利用MySQL的預編譯機制
web安全之SQL註入