防SQL注入

2021-09-26 09:00:17 字數 2090 閱讀 2085

與資料庫互動的 web 應用程式中最嚴重的風險之一:sql 注入攻擊。sql 注入是應用程式開發人員未預期的把 sql **傳入到應用程式的過程,它由於應用程式的糟糕設計而使攻擊成為可能,並且只有那些直接使用使用者提供的值構建 sql 語句的應用程式才會受影響。

sql 語句通過字串的構造技術動態建立,文字框的值被直接複製到字串中,可能是這樣的:

string sql = "select * from admininfo where admin_name='xiyangyang'";
在這個示例中,使用者可以篡改 sql 語句,通常,攻擊的第乙個目標是得到錯誤資訊。如果錯誤沒有被恰當處理,底層的資訊就會暴露給攻擊者。現在若是在文字框中輸入:xiyangyang』 or 『1』='1,再看看這條 sql 語句,它現在是這樣的:

string sql = "select * from admininfo where admin_name='xiyangyang' or '1'='1'";
這樣產生的後果是沒有顯示當前使用者的特定資訊,卻向攻擊者提供了全部資料,如果螢幕上顯示的是敏感資訊,如社會保險號,生日或者信用卡資料等,就會帶來嚴重的問題!

還可以進行更複雜的攻擊!例如攻擊者可以利用兩個連線號(–)注釋掉 sql 語句剩餘部分,雖然這樣的攻擊只限於sql server,不過對於其他型別的資料庫也有等效的辦法。另外,攻擊者還可以執行含有任意 sql 語句的批處理命令,對於 sql server,攻擊者只需加上分號(;),攻擊者用這樣的方式還可以刪除其他表的內容。

下面是攻擊者在文字框中輸入的,他的目的是刪除 admininfo表的全部行:xiyangyang』 ; delete from admininfo where 『1』='1,得到的 sql 語句是這樣:

「select * from admininfo where admin_name='xiyangyang';delete from admininfo where '1'='1'」
預防手段:

·使用 textbox.maxlength 屬性防止使用者輸入過長的字元,這樣減少了貼入大量的指令碼的可能性·

使用 asp.net 驗證控制項鎖定錯誤的資料·

限制錯誤資訊給出的提示,捕獲到異常時只顯示一些通用的資訊,而不是顯示 exception.message 屬性中的資訊,它會暴露出系統的攻擊點·

更為重要的是,一定要小心去掉特殊字元,比如將單引號替換為兩個單引號·

最好的解決方法是使用引數化的命令或者使用儲存過程執行轉義以防止 sql 注入攻擊

使用引數化命令:

引數化命令是在 sql 文字中使用佔位符的命令,佔位符表示需要動態替換的值,它們通過 command 物件的 parameters 集合來傳送。

例如下面這條sql語句:

string sql = "select * from admininfo where admin_name='xiyangyang'";
可以寫成這樣:

string sql = "select * from admininfo where admin_name=@adminname";
為每個引數建立乙個 parameter 物件,這些物件被加入到 command.parameters 集合中。下面的示例重寫前面的**防止可能的 sql 注入攻擊

若在修改後的頁面上再次嘗試 sql 注入攻擊,將得不到任何記錄。因為沒有admin_name值與 文字框輸入的 xiyangyang』 or 『1』 = 『1』 相等的訂單項,這正是我們期待的結果。

cmd.parameters是物件裡面的乙個屬性,返回值是乙個集合

有時會用到同樣的變數名 所以在繫結引數之前先清除一下cmd.parameters.clear();

防SQL注入

這段 有好處也有壞處,用的時候得小心,搞不好就會跳進錯誤 dimsql injdata sql injdata and exec insert select delete update chr mid master truncate char declare sql inj split sql in...

防SQL注入

1.必須認定使用者輸入的資料都是不安全的 使用者輸入的資料進行過濾處理 if preg match w get username matches else 讓我們看下在沒有過濾特殊字元時,出現的sql情況 設定 name 中插入了我們不需要的sql語句 name qadir delete from ...

被動防SQL注入

call sql into check 呼叫ql防注入 2008 05 14 kz sql防注入 2008 05 14 kz sub sql into check dim sql injdata sql injdata and exec insert select delete update cou...