新聞中心
這篇文章主要介紹了php防sql注入的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
德欽網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
SQL注入(SQLi)是一種注入攻擊,,可以執(zhí)行惡意SQL語(yǔ)句。它通過(guò)將任意SQL代碼插入數(shù)據(jù)庫(kù)查詢,使攻擊者能夠完全控制Web應(yīng)用程序后面的數(shù)據(jù)庫(kù)服務(wù)器。
攻擊者可以使用SQL注入漏洞繞過(guò)應(yīng)用程序安全措施;可以繞過(guò)網(wǎng)頁(yè)或Web應(yīng)用程序的身份驗(yàn)證和授權(quán),并檢索整個(gè)SQL數(shù)據(jù)庫(kù)的內(nèi)容;還可以使用SQL注入來(lái)添加,修改和刪除數(shù)據(jù)庫(kù)中的記錄。
php如何防sql注入?
1、什么時(shí)候最易受到SQL注入攻擊
當(dāng)應(yīng)用程序使用輸入內(nèi)容來(lái)構(gòu)造動(dòng)態(tài)SQL語(yǔ)句,以訪問(wèn)數(shù)據(jù)庫(kù)時(shí)會(huì)發(fā)生SQL注入攻擊
2、如何防止SQL注入
a、永遠(yuǎn)不要相信用戶的輸入,對(duì)用戶輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度,對(duì)單引號(hào)和“_”進(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ǔ)過(guò)程進(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ù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)連接
$conn = @new MySQLi('localhost','root','','myschool'); if($conn->connect_error){ die('連接數(shù)據(jù)庫(kù)失敗'); } $conn->set_charset('utf8');
d、不要把機(jī)密的信息直接存放,加密或者HASH掉密碼和敏感的信息
e、QL注入的檢測(cè)方法一般是采取輔助軟件或網(wǎng)站平臺(tái)檢測(cè),軟件一般采取SQL注入檢測(cè)工具jsky,網(wǎng)站平臺(tái)就有億思,網(wǎng)站平臺(tái)檢測(cè)工具
3、php mysqli擴(kuò)展之預(yù)處理
在mysqli操作中常常涉及到它的三個(gè)主要類:MYSQLI類,MYSQL_STMT類,MYSQLI_RESULT類,預(yù)處理主要利用MYSQL_STMT類完成的。
預(yù)處理是一種重要的防止SQL注入的手段,對(duì)提高網(wǎng)站安全性有重要意義,預(yù)處理語(yǔ)句的工作原理:
(1)預(yù)處理:創(chuàng)建SQL語(yǔ)句模板并發(fā)送到數(shù)據(jù)庫(kù),預(yù)留的值使用參數(shù)?標(biāo)記。
例:insert into myguests(firstname,lastname,email) values (?,?,?)
(2)數(shù)據(jù)庫(kù)分析,編譯,對(duì)SQL語(yǔ)句模板執(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ù)庫(kù)執(zhí)行語(yǔ)句,應(yīng)用可以多次執(zhí)行語(yǔ)句,如果參數(shù)的值不一樣
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享php防sql注入的方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
標(biāo)題名稱:php防sql注入的方法
文章鏈接:http://www.dlmjj.cn/article/iiddhd.html