溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php防sql注入的方法

發(fā)布時(shí)間:2020-08-20 15:21:45 來源:億速云 閱讀:193 作者:小新 欄目:編程語言

這篇文章主要介紹了php防sql注入的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

SQL注入(SQLi)是一種注入攻擊,,可以執(zhí)行惡意SQL語句。它通過將任意SQL代碼插入數(shù)據(jù)庫查詢,使攻擊者能夠完全控制Web應(yīng)用程序后面的數(shù)據(jù)庫服務(wù)器。

攻擊者可以使用SQL注入漏洞繞過應(yīng)用程序安全措施;可以繞過網(wǎng)頁或Web應(yīng)用程序的身份驗(yàn)證和授權(quán),并檢索整個(gè)SQL數(shù)據(jù)庫的內(nèi)容;還可以使用SQL注入來添加,修改和刪除數(shù)據(jù)庫中的記錄。

php如何防sql注入?

1、什么時(shí)候最易受到SQL注入攻擊

當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動(dòng)態(tài)SQL語句,以訪問數(shù)據(jù)庫時(shí)會(huì)發(fā)生SQL注入攻擊

2、如何防止SQL注入

a、永遠(yuǎn)不要相信用戶的輸入,對用戶輸入進(jìn)行校驗(yàn),可以通過正則表達(dá)式,或限制長度,對單引號和“_”進(jìn)行轉(zhuǎn)換

不建議使用:

//$user = htmlspecialchars(addslashes($user));
 //$pwd = htmlspecialchars(addslashes($pwd));
 //$yzm = htmlspecialchars(addslashes($yzm));

應(yīng)使用:

$user = htmlspecialchars(addslashes($user));
$pwd = htmlspecialchars(addslashes($pwd));
$yzm = htmlspecialchars(addslashes($yzm));

b、永遠(yuǎn)不要使用動(dòng)態(tài)拼裝SQL,可以使用參數(shù)化的SQL或者直接使用存儲(chǔ)過程進(jìn)行數(shù)據(jù)查詢存取

不建議使用:

// $sql = "select * from user where user='$user' and pwd ='$pwd'";

應(yīng)使用:

$sql = "select * from user where user=? and pwd =?";

c、永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)連接

$conn = @new mysqli('localhost','root','','myschool');
if($conn->connect_error){
die('連接數(shù)據(jù)庫失敗');
}
 
$conn->set_charset('utf8');

d、不要把機(jī)密的信息直接存放,加密或者HASH掉密碼和敏感的信息

e、QL注入的檢測方法一般是采取輔助軟件或網(wǎng)站平臺(tái)檢測,軟件一般采取SQL注入檢測工具jsky,網(wǎng)站平臺(tái)就有億思,網(wǎng)站平臺(tái)檢測工具

3、php mysqli擴(kuò)展之預(yù)處理

在mysqli操作中常常涉及到它的三個(gè)主要類:MYSQLI類,MYSQL_STMT類,MYSQLI_RESULT類,預(yù)處理主要利用MYSQL_STMT類完成的。

預(yù)處理是一種重要的防止SQL注入的手段,對提高網(wǎng)站安全性有重要意義,預(yù)處理語句的工作原理:

(1)預(yù)處理:創(chuàng)建SQL語句模板并發(fā)送到數(shù)據(jù)庫,預(yù)留的值使用參數(shù)?標(biāo)記。

例:insert into myguests(firstname,lastname,email) values (?,?,?)

(2)數(shù)據(jù)庫分析,編譯,對SQL語句模板執(zhí)行查詢優(yōu)化,并存儲(chǔ)結(jié)果不輸出

if ($stmt = $conn->prepare($sql)) {
 
$stmt -> bind_param("ss",$user,$pwd);
$stmt -> execute();
$stmt -> store_result();
    //$res = $conn ->query($sql);
  if ($stmt->num_rows==0) {
show_error('輸入的用戶名或密碼錯(cuò)誤','demo1.html');
   }
   $stmt -> close();
}
$conn ->close();

(3)執(zhí)行,最后,將應(yīng)用綁定的值傳遞給參數(shù)(“?”標(biāo)記),數(shù)據(jù)庫執(zhí)行語句,應(yīng)用可以多次執(zhí)行語句,如果參數(shù)的值不一樣

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享php防sql注入的方法內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI