//永遠不要相信使用者的輸入,為了防止黑客在我們的表單,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 ...