1. 程式人生 > >Web安全漏洞——sql注入

Web安全漏洞——sql注入

1.原理

注入攻擊的本質,是把使用者輸入的資料當成程式碼執行。兩個關鍵條件:一是使用者能夠控制輸入;二是原本程式要執行的程式碼,拼接了使用者輸入的資料。當攻擊者傳送的sql語句被sql直譯器執行,通過執行這些惡意語句欺騙資料庫執行,導致資料庫資訊洩露。

2.分類

  1. 按注入點的引數型別:數字型、字元型
    當注入點的引數為整數時,如id、num、page等,這種形式為數字型注入漏洞
    當注入點的引數為字串時,則為字元型注入,字元型注入需要用引號來閉合
  2. 按資料庫返回結果:回顯注入、報錯注入、盲注
    回顯注入:可以直接在存在注入點的頁面返回結果
    報錯注入:如果Web伺服器開啟了錯誤回顯,如果查詢語句有語法錯誤,伺服器會返回錯誤資訊且直接顯示在頁面中,然沒有返回資料庫的查詢結果,但是可以構造一些報錯語句從錯誤資訊中獲取想要的結果。
    盲注
    :很多時候,Web伺服器關閉了錯誤回顯,盲注就是在伺服器沒有錯誤回顯時完成的注入攻擊,由於“除錯資訊”,攻擊者必須找到一個方式來驗證注入的sql語句是否得到執行。有based boolen和based time兩種盲注…詳解
  3. 按照注入位置及方式:post注入,get注入,cookie注入等
    漏洞利用例子(dvwa):
    https://www.freebuf.com/articles/web/120747.html

3.防禦

  1. 一般來說,防禦sql注入的最佳方式就是使用預編譯語句,繫結變數
  2. 使用安全的儲存過程,即先將sql語句定義在資料庫中,但是儲存過程也可能存在注入問題,因此應該儘量避免在儲存過程內使用動態的sql語句,如果無法避免,則應該使用嚴格的輸入過濾或者是編碼函式來處理使用者的輸入資料。
  3. 檢查輸入的資料型別
  4. 使用安全函式