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...