php中如何防止sql注入

2021-09-02 17:50:33 字數 1565 閱讀 3301

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)

$conn->set_charset('utf8');

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

e.sql注入的檢測方法一般是採取輔助軟體或**平台檢測,軟體一般採取sql注入檢測工具jsky,**平台就有億思,**平台檢測工具

3.php mysqli擴充套件之預處理

在mysqli操作中常常涉及到它的三個主要類:mysqli類,mysql_stmt類,mysqli_result類,預處理主要利用mysql_stmt類完成的。

(1)預處理:建立sql語句模板併發送到資料庫,預留的值使用引數?標記。

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

(2)資料庫分析,編譯,對sql語句模板執行查詢優化,並儲存結果不輸出

if ($stmt = $conn->prepare($sql)) 

$stmt -> close();

}$conn ->close();

(3)執行,最後,將應用繫結的值傳遞給引數(「?」標記),資料庫執行語句,應用可以多次執行語句,如果引數的值不一樣

php如何防止SQL注入

說明 判斷傳遞的變數中是否含有非法字元 如 post get 功能 防注入 要過濾的非法字元 arrfiltrate array union add 出錯後要跳轉的url,不填則預設前一頁 是否存在陣列中的值 function funstringexist strfiltrate,arrfiltra...

PHP如何防止SQL注入

一 引言 php是一種力量強大但相當容易學習的伺服器端指令碼語言,即使是經驗不多的程式設計師也能夠使用它來建立複雜的動態的web站點。然而,它在實現網際網路服務的秘密和安全方面卻常常存在許多困難。在本系列文章中,我們將向讀者介紹進行web開發所必需的安全背景以及php特定的知識和 你可以藉以保護你自...

php如何防止SQL注入

通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。在使用者名稱輸入框中輸入 or 1 1 密碼隨便輸入,這時候的合成後的sql查詢語句為 在mysql中是注釋符,這樣井號後面的內容將被mysql視為注釋內容,這樣就不會去執行了,等價於 s...