sql注入攻擊的總體思路
1、尋找到sql注入的位置
2、判斷伺服器型別和後台資料庫型別
3、針對不通的伺服器和資料庫特點進行sql注入攻擊
sql注入攻擊例項
比如在乙個登入介面,要求輸入使用者名稱和密碼:
可以這樣輸入實現免帳號登入:
使用者名稱: 『or 1 =. 2–
密 碼:點登陸,如若沒有做特殊處理,那麼這個非法使用者就很得意的登陸進去了.(當然現在的有些語言的資料庫api已經處理了這些問題)
這是為什麼呢? 下面我們分析一下:
從理論上說,後台認證程式中會有如下的sql語句:
1 string sql = 「select * from user where username=』 「+username+」 』 and password=』 「+password+」 '」;
當輸入了上面的使用者名稱和密碼,上面的sql語句變成:
1 select * from user where username=』』 『or 1 =. 2– – and password=』』 "
分析sql語句:
條件後面username=」or 1=1 使用者名稱等於 」 或1=1 那麼這個條件一定會成功;
然後後面加兩個-,這意味著注釋,它將後面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,使用者輕易騙過系統,獲取合法身份
應對方法
下面我說一下應對方法:
1.(簡單又有效的方法)preparedstatement
採用預編譯語句集,它內建了處理sql注入的能力,只要使用它的set***方法傳值即可。
使用好處:
(1).**的可讀性和可維護性.
(2).preparedstatement盡最大可能提高效能.
(3).最重要的一點是極大地提高了安全性.
原理:
sql注入只對sql語句的準備(編譯)過程有破壞作用
而preparedstatement已經準備好了,執行階段只是把輸入串作為資料處理,
而不再對sql語句進行解析,準備,因此也就避免了sql注入問題.
$sql="select * from
userwhere user=? and pwd=?"; if($stmt = $conn->prepare($sql)) $stmt->close(); } $conn ->close();
2對資料進行簡單處理
$user=htmlspecialchars(addslashes(trim($user))); $pwd=htmlspecialchars(addslashes(trim($pwd)));
//再來構建sql語句
$sql="select * from
userwhere user='$user' and pwd='$pwd' "; //第一種方法 $res = $conn->query($sql); if($res->num_rows == 0)
這樣就不會給非法使用者可乘之機了。
以上就是防止sql注入的方法。
防止SQL注入的幾種方式
1 什麼是sql注入 簡而言之,就是客戶端向服務端傳送請求時,將sql指令插入到form表單或者url中,達到欺騙伺服器的目的,最終這些注入進去的sql指令就會被伺服器誤認為是正常的sql指令而執行,因此服務端的資訊就存在被破壞或是洩露的危險。2 sql注入的防護 了解了sql注入,就需要有針對性的...
防止sql注入方法
1 mysql real escape string 轉義 sql 語句中使用的字串中的特殊字元,並考慮到連線的當前字符集 使用方法如下 sql select count as ctr from users where username mysql real escape string userna...
防範SQL注入的幾種方法 3
對於一些整機使用的站點來說防止通過 80埠攻擊而直接拿到整機管理許可權,這一點就變得至關重要了。對 xp cmdshell 的過濾就成為首要,很多站點的程式都是用 get或者是 get與 post 混合來提交資料的,對於此,我們給出一種防止 get進行 sql注入的程式 如程式體 5 fqys re...