防止sql注入的幾種方法

2021-09-02 02:21:51 字數 1568 閱讀 1141

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 * fromuserwhere 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 * fromuserwhere 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...