在所有的數據庫安全威脅攻擊手段中,SQL注入是其中非常典型的攻擊方法,也是目前數據庫面臨的幾大主要安全威脅之一。我們希望通過SQL注入是一種常見的入侵WEB應用的手法。SQL注入是利用應用系統(tǒng)的編程漏洞和SQL語言的語法特征,改變原始的SQL語句執(zhí)行邏輯而產生的。
攻擊者向Web應用發(fā)送精心構造的輸入數據,這些輸入中的一部分被解釋成SQL指令,改變了原來的正常SQL執(zhí)行邏輯,執(zhí)行了攻擊者發(fā)出的SQL命令,最終使攻擊者獲取Web應用的管理員權限或者下載了Web應用存到數據庫中的敏感信息。
為了讓大家加深了解,下面簡單地對SQL注入的原理進行示例性說明,如下圖是某網站的登錄界面:
登陸界面中輸入用戶名:admin 密碼admin1234。在Web應用程序后臺會把輸入和程序混合變成SQL命令去訪問數據庫。最終Web應用發(fā)給后臺數據的SQL命令是:
Select * from users where username = 'admin' and Password = 'admin1234'(這個形式)
這個SQL查詢要求數據庫檢查“用戶表”中的每一行,提取出每條username列為admin和Password列值為admin1234的記錄。如果數據庫中WHERE后的條件滿足。應用程序將為該用戶建立一個通過驗證的會話。(Web應用登陸成功)
上面是正常登陸Web應用的過程。如果由于編程的不嚴謹,用戶名或密碼輸入處存在SQL注入點,攻擊者可以利用SQL注入繞過Web應用的登陸訪問控制。例如攻擊者在用戶名處輸入admin'-- 密碼處可以輸入任意值均可通過。
因為,后臺實際的SQL語句將演變成:
select * from users where username ='admin'--' and password ='123dq
在SQL Server中“-”等于注釋,由于加入了“—”上面的語句等價于
select * from users where username= 'admin'
也就是說只要有用戶名為admin。攻擊者就可以直接用admin登入到應用系統(tǒng)中。
當然,SQL注入的攻擊方法遠不止這一種,作者會在以后的文章中介紹更多的攻擊實例,并給出相應的防護措施,希望各位可以在了解攻擊原理的基礎上,找到適用于自己的數據庫安全防護措施。