1、為什么會存在這種攻擊方式?
大多數的B/S系統或者C/S系統,都會涉及到數據的存儲和交互,數據一般保存在SQL server、Mysql等數據庫中。因此,常見的數據交互中,往往需要根據用戶輸入的信息進行數據庫查詢等操作:
(1)用戶登錄,需要根據用戶填寫的用戶名和密碼查詢數據庫進行校驗。
(2)數據查詢,需要根據指定條件過濾對應權限或者范圍的數據。
這些操作一般是由客戶端將用戶填寫的信息提價到web服務器,服務器再轉換為相應的sql語句訪問數據庫。問題就出在服務器轉換sql語句的這個過程中。
通常的編程規范都會提醒我們要注意外部輸入的數據參數,以免發生一些程序異常。所以,sql注入之所以會存在,其實就是因為程序員在編寫web服務端的程序時,沒有對客戶端提交的參數進行安全檢查,導致黑客可以利用這些漏洞來達到自己的目的。
2、什么是SQL注入式攻擊?
SQL注入攻擊,就是利用程序漏洞,在輸入信息中構造特定的sql語句,來繞過程序的權限、控制程序的后台等等。
例如用戶登錄模塊,一般要檢測用戶名(username)和密碼(password)
如果后台的檢測sql語句為:select * from users where uname = username and pwd = password
那么,如果在登錄時,構造這樣的輸入:
a OR '1'='1'
b OR '1'='1'
這樣就可能繞過用戶校驗,不需要知道用戶名和密碼即可登錄系統。
3、如何防御這種攻擊?
說白了,還是安全校驗,這應該是一個程序員必須的編程素養。
通過過濾用戶輸入中的特定字符,應該可以有效抵御sql注入攻擊。