php防止SQL注入

2021-09-12 21:53:23 字數 2629 閱讀 5779

//永遠不要相信使用者的輸入,為了防止黑客在我們的表單,get,header頭中輸入一些惡意的sql,為此,我們需要在後台進行執行sql**的時候進行對sql注入的預防

//那麼首先來說一下什麼是sql注入

//案例一

1//我們通過get來進行傳遞引數,查詢資料庫中goods表中id=1的資料,這樣的查詢是非常正常的,來看看我們後台的**

$id=

$_get

['id']?

$_get

['id']:

"";if(

empty

($id))

//可以看出來,我們在後台是沒有對傳遞過來的引數進行過濾的,所以,黑客往往可以對sql進行sql注入,達到惡意攻擊的效果

select * from goods where id=-1

or1=1

//這個sql前面部分id=-1是永遠不可能存在的,因為id為乙個整形,所以前面的部分返回false,然而後面的1=1這塊sql返回值為true,所以這條sql的返回永遠為true,這樣的話,這條sql將會變為

select * from goods;

//就會查出全表的資料,這樣並不是我們想要的結果,那麼我們怎麼防止使用者這樣輸入呢

//在後台執行sql前,對傳遞過來的引數進行校驗

is_numeric()

:判斷是否為乙個數字

$id=

$_get

['id']?

$_get

['id']:

"";if(

empty

($id)||

!is_numeric

($id)||

preg_match

("/^[1-9][0-9]*$/"

,$id))

//這樣校驗就會達到防止使用者惡意輸入的效果

//上面是最基本的sql注入,sql注入還可以通過mysql的注釋符: #,-- ,來通過截止注釋符號後面的sql語句,一般用來攻擊公司後台,使用者賬號等。

//我們來模擬乙個表單

$username

=$_get

['username'];

$password

=md5

($_get

['password'])

;if(empty

($username)||

empty

($password))

$sql

="select * from user where username=

and password=";

//這樣的sql實際上是沒有什麼問題的,但是在經過處理之後,就會變成

$sql

="select * from user where username=

# and password=";

//在加了乙個#注釋符後,sql語句就不會執行後面對密碼的查詢,或者是,

$sql

="select * from user where username=

-- and password=";

//處理的方法為:

//1.使用mysqli_real_escape_string 和 addslashes函式,函式結果相同

$username

=addslashes

($username);

$username

=mysqli_real_escape_string

("資料庫"

,$username);

//對where條件比較靠前的,採用sql語句轉義,輸出的結果為

select * from user where username=

$username

and password=

'123213213'

;//這樣執行sql注入後,sql就會變為

$sql_carry

=select * from user where username=

'abel_jiawei'

# and password='123213123';

//通過轉移符,控制sql語句

$new_sql

=select * from user where username=

'abel_jiawei'\'#'

and password=

'123213312'

;//2.運用php正規表示式匹配

preg_match

("/^[a-za-z0-9]$/"

,$username

)//php正規表示式驗證

//3.如果使用者輸入中含有','',",這樣的值,使用str_replace函式過濾

str_replace

(要過濾的值,改變成什麼,對誰)

$username

=str_replace(''

','',$username);

//這樣的話再執行sql,當使用者輸入->abel_jiawei'

,這樣的值也就不會出錯了;

php 防止sql注入

標題起的名字很大其實這裡只說乙個簡單的方法 防止sql注入的方法有很多,這裡要說的其實就是漏洞演練平台dvwa裡的一種方式 直接看high級別的就可以了 id get id id stripslashes id id mysql real escape string id if is numeric...

php防止sql注入

所謂sql注入,是由表單提交時,後台拼接 sql語句造成的。如此,會給系統帶來很大的破壞,甚至導致整個資料庫被清掉,或刪除。因此必須做好防注入操作。關於這個問題,成熟的方案有很多,現在總結如下 一,從根源上解決問題,也就是在接受表單提交時,要特別注意sql拼接處理可能帶來的影響,避免給黑客留下突破口...

PHP防止sql注入

如果沒有防止sql注入,那麼你的 一些重要資訊就會被一些人輕易用特殊的字元登入而盜竊。比如 登入時的查詢語句為 select from 表名 where username 使用者名稱 and password 密碼 當使用者輸入使用者名為 or 1 or 密碼不輸入,此時的查詢語句為 select ...