防範Sql注入式攻擊

2021-08-26 03:56:25 字數 1535 閱讀 1056

sql注入式攻擊是指利用設計上的漏洞,在目標伺服器上執行sql 命令以及進行其他方式的攻擊

string name = getuserinput("bookname"); string script = "select table_book where book_name like '%" + name + runsql(script) runsql(script);

如果name= "'; select @@servername where ''='";

//id和password直接來自使用者的輸入。未做處理

string id = getuserinput("userid"); string password = getuserinput("userpassword"); tring script = "select * from table_user where user_id = '" + id + "' and user_password? = '" + password + "' "; runsql(script);

如果使用者輸入的password為「' or ''=' 」,那麼生成的script就為:

select * from table_user where user_id = 'userid' and user_password = '' or ''=''

這樣一來,即使不知道使用者的密碼也可以察看該使用者的帳戶資訊了

再比如,入侵者會把一些巧妙偽裝的**嵌入到你動態生成的sql命令中,比如:

delete table_book where 1 = 1 use master--

上面的例子都是一些簡單的示例,攻擊者還可能通過sql的漏洞對作業系統進行攻擊,比如執行

[xp_cmdshell],[xp_regread]

當然實際上的攻擊沒有這麼簡單,攻擊者還會利用系統設計的其他漏洞。比如程式把資料庫返回的出錯資訊沒有進行轉換就直接輸出給使用者看,那麼攻擊者就設計一些sql語句誘導系統返回需要的資訊

從上面的這些例子可以看出,對資料庫訪問許可權的設計不當,給與每乙個資料庫連線太多的許可權,甚至dbo或sa的許可權,也是sql注入式攻擊利用的主要漏洞之一。

防範sql注入式攻擊

最小許可權原則。特別是不要用dbo或者sa賬戶,為不同的型別的動作或者組建使用不同的賬戶,最小許可權原則適用於所有與安全有關的場合

對使用者輸入進行檢查。對一些特殊字元,比如單引號,雙引號,分號,逗號,冒號,連線號等進行轉換或者過濾;使用強資料型別,比如你需要使用者輸入乙個整數,就要把使用者輸入的資料轉換成整數形式;限制使用者輸入的長度等等。這些檢查要放在server執行,client提交的任何東西都是不可信的

使用儲存過程。如果一定要使用sq語句,那麼用標準的方式組建sql語句,比如可以利用parameters物件,避免用字串直接拼sq命令。

當sql執行出錯時,不要把資料庫返回的錯誤資訊全部顯示給使用者,錯誤資訊經常會透露一些資料庫設計的細節

針對常用的sql注入式攻擊方式對症下藥

防範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...

防範Sql注入式攻擊

sql注入式攻擊是指利用設計上的漏洞,在目標伺服器上執行sql 命令以及進行其他方式的攻擊 string name getuserinput bookname string script select table book where book name?like?n name runsql scr...