天天看點

web服務端安全之SQL注入攻擊

攻擊者在HTTP請求中注入惡意的SQL代碼,并在服務端執行。

一、SQL注入攻擊的原理

攻擊者在HTTP請求中,注入惡意的SQL代碼,并在服務端執行。

比如使用者登入,輸入使用者名camille,密碼 ' or '1'='1 ,如果此時使用參數構造的方式,就會出現

select * from user where name = 'camille' and password = '' or '1'='1'      

不管使用者名和密碼是什麼,查詢出來的使用者清單都不為空,這樣可以随意看其他使用者的資訊。

二、SQL注入攻擊的出現場景

1、url參數送出

2、表單送出

3、cookie參數送出

4、http請求頭部可修改的值比如referer,userAgent

三、SQL注入攻擊的防禦

1、用戶端

  • 限制字元串輸入的長度;
  • 有效性檢驗。
//過濾URL非法SQL字元,或者過濾文本框非法字元。
var sUrl = location.search.toLowerCase();
var sQuery = sUrl.substring(sUrl.indexOf("=")+1);
reg=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|<|%/i;
if(reg.test(sQuery))
{
    alert("請勿輸入非法字元");
    location.href = sUrl.replace(sQuery,"");
}      

2、服務端

  • 使用預編譯語句,綁定變量;
  • 嚴格檢查使用者資料,有效性檢驗,防止攻擊者繞過用戶端請求;
  • 永遠不要使用動态拼裝SQL,可以使用參數化的SQL或者直接使用存儲過程進行資料查詢存取;
  • 過濾SQL需要的參數中的特殊字元,比如單引号、雙引号。

部落格簽名:敬畏生命,珍惜時間,熱愛生活。