首頁 >後端開發 >PHP問題 >php如何防sql注入?

php如何防sql注入?

青灯夜游
青灯夜游原創
2019-10-12 17:23:0010816瀏覽

SQL注入(SQLi)是一種注入攻擊,,可以執行惡意SQL語句。它透過將任意SQL程式碼插入資料庫查詢,使攻擊者能夠完全控制網路應用程式後面的資料庫伺服器。

php如何防sql注入?

攻擊者可以使用SQL注入漏洞繞過應用程式安全措施;可以繞過網頁或網路應用程式的驗證和授權,並擷取整個SQL資料庫的內容;也可以使用SQL注入來添加,修改和刪除資料庫中的記錄。

php如何防sql注入?

1、何時最容易受到SQL注入攻擊

#當應用程式使用輸入內容來建構動態SQL語句,以便存取資料庫時會發生SQL注入攻擊

2、如何防止SQL注入

a、永遠不要相信使用者的輸入,對使用者輸入進行校驗,可以透過正規表示式,或限制長度,對單引號和「_」進行轉換

不建議使用:

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

應使用:

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

b、永遠不要使用動態拼裝SQL,可以使用參數化的SQL或直接使用預存程序進行資料查詢存取

不建議使用:

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

應使用:

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

c、永遠不要使用管理員權限的資料庫連接,為每個應用程式使用單獨的權限有限的資料連接

$conn = @new mysqli('localhost','root','','myschool');
if($conn->connect_error){
die('连接数据库失败');
}
 
$conn->set_charset('utf8');

d、 不要把機密的資訊直接存放,加密或HASH掉密碼和敏感的資訊

e、QL注入的檢測方法一般是採取輔助軟體或網站平台檢測,軟體一般採取SQL注入偵測工具jsky,網站平台就有億思,網站平台偵測工具

3、php mysqli擴充之預處理

##在mysqli操作中常常涉及它的三個主要類別:MYSQLI類,MYSQL_STMT類,MYSQLI_RESULT類,預處理主要利用MYSQL_STMT類別完成的。

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

(1)預處理:建立SQL語句範本並傳送到資料庫,預留的值使用參數?標記。

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

(2)資料庫分析,編譯,對SQL語句範本執行查詢最佳化,並儲存結果不輸出

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('输入的用户名或密码错误','demo1.html');
   }
   $stmt -> close();
}
$conn ->close();

(3)執行,最後,將應用綁定的值傳遞給參數(“?”標記),資料庫執行語句,應用可以多次執行語句,如果參數的值不一樣

更多PHP相關知識,請造訪

PHP中文網

以上是php如何防sql注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn