SQL注入漏洞與防範

2021-08-15 05:50:54 字數 1680 閱讀 8824

sql注入的原理:在原有sql語句上附加一段sql**,構造特殊的sql語句,利用程式自身的許可權實現所需要的操作。

假如現在有一張user表:

uidusernamepwd

1adminadmin222

2custome123456

現在執行乙個登入操作:

<?php  

$conn

=mysqli_connect(

"localhost"

,"root"

,"root"

,"test"

);  

// 連線資料庫test

if(!

$conn

)   

mysqli_query($conn

,"set names utf8"

);  

// 指定編碼格式

$user = $_get['user'];

$pwd = $_get['pwd'];

$sql

="select * from user where username = '' and pwd = ''"

;  // sql語句

$result

=mysqli_query(

$conn

,$sql

);  

// 執行sql語句,將執行結果返回到結果集中

$row

=mysqli_fetch_array(

$result

);  

// 從結果集中取得一行作為陣列

echo

"";  

print_r($row

);  

?>  

如上**執行的是乙個簡單的登入操作,在瀏覽器中執行這個程式:localhost/test/login.php?user=admin&pwd=admin222,執行的sql語句相當於:select * from user where username= 'admin' and pwd = 'admin222',將會得到執行結果。

如果請求:localhost/test/login.php?user=admin&pwd=admin,由於密碼與使用者名稱不匹配導致沒有任何查詢結果。即:sql語句:select * from user where username= 'admin' and pwd = 'admin'是查詢不到結果的。那麼,如果是sql語句:select * from user where username= 'admin' and pwd = 'admin' or 1 = 1;呢?你可以自己試一下,這個你可以得到如下:

uidusernamepwd

1adminadmin222

2custome123456

如果在客戶端訪問:

localhost/test/login.php?user=admin&pwd=admin%20or%201=1呢?

直接就繞過了驗證,獲取到了資料庫裡面的admin使用者的資訊了。這就是乙個簡單的sql注入。

sql注入的防範:

(1)如果是整形變數用intval()函式或(int)把所有傳入的引數轉化為乙個數值。

(2)對於字元型變數,用addslashes()把所有'(單引號)、"(雙引號)、\(反斜線)和 (空格)轉為含有反斜線的字元。

(3)轉義或過濾一些特殊字元,如%等。

(4)做好資料備份。。。

防範SQL注入漏洞

sql注入漏洞並不可怕,知道原理 耐心仔細,就可以徹底防範!下面給出4個函式,足夠你抵擋一切sql注入漏洞!讀懂 你就能融會貫通。注意要對所有的request物件進行過濾 包括 request.cookie,request.servervariables 等等容易 被忽視的物件 function k...

終極防範SQL注入漏洞

終極防範sql注入漏洞 其實sql注入漏洞並不可怕,知道原理 耐心仔細,就可以徹底防範!下面給出4個函式,足夠你抵擋一切sql注入漏洞!讀懂 你就能融會貫通。注意要對所有的request物件進行過濾 包括 request.cookie,request.servervariables 等等容易被忽視的...

終極防範SQL注入漏洞

終極防範sql注入漏洞 其實sql注入漏洞並不可怕,知道原理 耐心仔細,就可以徹底防範!下面給出4個函式,足夠你抵擋一切sql注入漏洞!讀懂 你就能融會貫通。注意要對所有的request物件進行過濾 包括 request.cookie,request.servervariables 等等容易被忽視的...