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注入攻擊。
SQL注入式攻擊
常見的sql注入式攻擊過程類如 某個asp.net web應用有乙個登入頁面,這個登入頁面控制著使用者是否有權訪問應用,它要求使用者輸入乙個名稱和密碼。登入頁面中輸入的內容將直接用來構造動態的sql命令,或者直接用作儲存過程的引數。下面是asp.net應用構造查詢的乙個例子 system.text....
防範SQL注入式攻擊
拷貝別人的 sql注入式攻擊是利用是指利用上的漏洞,在目標伺服器上執行 sql命令以及進行其他方式的攻擊 動態生成 sql命令時沒有對使用者輸入的資料進行驗證是 sql注入攻擊得逞的主要原因。比如 如果你的查詢語句是select fromadminwhereusername user andpass...
防範Sql注入式攻擊
sql注入式攻擊是指利用設計上的漏洞,在目標伺服器上執行sql 命令以及進行其他方式的攻擊 string name getuserinput bookname string script select table book where book name like name runsql scrip...