1. 程式人生 > >SQL注入的攻擊與防禦(簡單篇)

SQL注入的攻擊與防禦(簡單篇)

原理:SQL注入攻擊值得是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是SQL語法裡的一下組合,
通過執行SQL語句進執行攻擊者所要的操作,其主要原因是程式沒有細緻的過濾使用者輸入的資料,致使非法資料侵入系統。


SQL注入的產生原因:
 不當的型別處理,不安全的資料庫配置, 不合理的查詢集處理, 不當的錯誤處理, 轉義字元處理不合適, 多個提交處理不當


SQL注入方法一般有兩種:
方法一:採用直接猜表名和列名的方法或者是利用報錯資訊來確定表明和列名
And (Select count(*) from 要猜的表名)<>0  
    And (Select count(要猜的列名) from 已知的表名)<>0
注意:<>在sql中是不等於,結果若返回正確則猜的表名和列名是正確的


方法二:後臺身份驗證繞過漏洞
  此方法利用的就是AND和OR的運算規則,從而造成後臺指令碼邏輯性錯誤
  若後臺的查詢語句為sql='select admin from t_admin where user='request("user")' and passwd='request("user")';
但輸入使用者名稱密碼若為  'or 'a'='a',那麼查詢語句就變成了select admin from t_admin where user=''or 'a'='a' and passwd=''or 'a'='a';
這裡就變成了四個查詢語句即: 假 or 真 and 假 or 真, 先算and再算or,就變成: 假or 假 or真,結果為真,就能直接接入後臺了。
不過要想用這種方法進行攻擊,必須具備一個條件:是這種使用者名稱和密碼在一個查詢語句中。 或者可以 'or 1=1 --  (--為sql註釋符)


簡單的SQL注入防禦方法:
 1、首先要對輸入的資料進行過濾,將常見的sql語句的關鍵詞:select or ' " 等字元進行過濾。
 2、對在資料庫中對密碼進行加密,驗證登陸的時候先將 密碼進行加密再與資料庫中加密的密碼進行對比,若此時一致則基本是安全的。
 3、對資料庫中密碼採用常用的MD5加密時儘量在字串的前邊和後邊加上指定字元後在進行加密,這樣即便是看到了資料庫也很難破解密碼。

後續通過深入的試驗和理解會給出高階篇,有錯誤歡迎大家指正,一塊學習!