SQL注入(SQLi)是一種注入攻擊,,可以執行惡意SQL語句。它透過將任意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中文網其他相關文章!