一、SQL注入攻擊(SQL Injection)

攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的字符串,欺騙服務器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。常見的SQL注入式攻擊過程類如:
1.某個Web應用有一個登錄頁面,這個登錄頁面控制著用戶是否有權訪問應用,它要求用戶輸入一個名稱和密碼;
2.登錄頁面中輸入的內容將直接用來構造動態(tài)的SQL命令,或者直接用作存儲過程的參數(shù);
例如:

$query = 'SELECT * from Users WHERE login = ' . $username . ' AND password = ' . $password;

3.攻擊者在用戶名字和密碼輸入框中輸入'或'1'='1之類的內容;
4.用戶輸入的內容提交給服務器之后,服務器運行上面的代碼構造出查詢用戶的SQL命令,但由于攻擊者輸入的內容非常特殊,所以最后得到的SQL命令變成:

SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1';

5.服務器執(zhí)行查詢或存儲過程,將用戶輸入的身份信息和服務器中保存的身份信息進行對比;
6.由于SQL命令實際上已被注入式攻擊修改,已經不能真正驗證用戶身份,所以系統(tǒng)會錯誤地授權給攻擊者。
如果攻擊者知道應用會將表單中輸入的內容直接用于驗證身份的查詢,他就會嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統(tǒng)授予訪問權限。
系統(tǒng)環(huán)境不同,攻擊者可能造成的損害也不同,這主要由應用訪問數(shù)據(jù)庫的安全權限決定。如果用戶的帳戶具有管理員或其他比較高級的權限,攻擊者就可能對數(shù)據(jù)庫的表執(zhí)行各種他想要做的操作,包括添加、刪除或更新數(shù)據(jù),甚至可能直接刪除表
防范方法:
1.檢查變量數(shù)據(jù)類型和格式
2.過濾特殊符號
3.綁定變量,使用預編譯語句

二、跨網站腳

網友評論