網站的運行安全是每個站長必須考慮的問題。眾所周知,黑客攻擊網站的方式大多是sql註入,這就是為什麽我們常說最原始、最靜態的網站是最安全的。今天,我們來談談PHP註入的安全規範,以防止您的網站被sql註入。當今主流的網站開發語言是php,因此讓我們從如何防止php網站中的sql註入開始:
php註射的安全註意事項通過上述過程,我們可以了解Php註射的原理和技巧,當然我們也可以制定相應的註意事項:
首先是服務器的安全設置,包括phpmysql的安全設置和linux主機的安全設置。為了防止phpmysql註入,首先將magic_quotes_gpc設置為on,將display_errors設置為Off。如果是id類型,我們使用intval()將其轉換為整數類型,例如代碼:
$ id = intval($ id);
MySQL _ query =“select * from example wherearticleid =‘$ id‘“;或者這樣寫:MySQL _ query(“select * fromaticlewearticleid =“。int val(id)。"")
如果是字符類型,則使用addslashes()進行過濾,然後過濾“%”和“_”,例如:
$ search = add slashes($ search);
$ search = str _ replace(“_“,“_“,$ search);
$ search = str _ replace(“%“,““%“,$ search);
當然,妳也可以添加php通用反註入代碼:
/*************************
通用PHP防註入安全代碼
描述:
確定傳遞的變量是否包含非法字符。
例如,$_POST,$_GET
功能:
反向註射
**************************/
//要過濾的非法字符
$ arr濾液=數組(““,“;“,“工會”);
//出錯後要跳轉的url。如果留空,則默認為上壹頁。
$StrGoUrl=“
//數組中有值嗎?
函數FunStringExist($ str filter,$ arrfilter)
foreach($ arrfilteras $ key = $ value ){
if(eregi($ value,$ StrFiltrate)({
返回true
}
}
返回false
}
//合並$_POST和$_GET。
if(function _ exists(array _ merge))
$ ArrPostAndGet = array _ merge($ HTTP _ POST _ VARS,$ HTTP _ GET _ VARS);
}否則{
foreach($ HTTP _ POST _ VARSas $ key = $ value ){
$ ArrPostAndGet【】= $ value;
}
foreach($ HTTP _ GET _ VARSas $ key = $ value ){
$ ArrPostAndGet【】= $ value;
}
}
//身份驗證開始。
foreach($ arrpostandgets $ key = $ value ){
if(FunStringExist($ value,$ ArrFiltrate
echo“alert(/“nee ao提示,非法字符/“);
if(empty($ StrGoUrl)){
echo“history . go(-1);;
}否則{
echo“window . location =/“quot;。$ StrGoUrl。"/";";
}
退出;
}
}
威普,妳可以。
**************************/
此外,管理員用戶名和密碼通過md5加密,可以有效防止php的註入。
還有壹些針對服務器和mysql的安全防範措施。
linux服務器的安全設置:
加密密碼,使用“/usr/sbin/authconfig”工具打開密碼的影子功能並加密密碼。
禁止接觸重要文件。進入linux命令界面並輸入:
#chmod600/etc/inetd.conf//將文件屬性更改為600。
#chattrI/etc/inetd.conf//確保文件的所有者是root。
# # chattr-I/etc/inetd . conf///限制對此文件的更改。
不允許任何用戶通過su命令更改為root用戶。
在su配置文件的開頭添加以下兩行,即/etc/PAM . d/目錄:
auth sufficult/lib/security/PAM _ rootok . so debug
需要授權/lib/security/PAM _ wheel . so group = wheel。
刪除所有特殊賬戶。
#userdellp等。刪除用戶
#groupdellp等。刪除此組
禁止的suid/sgid程序
# find/-type f)-execls _ LG { };
如何判斷PHP源代碼是否存在SQL註入漏洞?
要判斷是否有SQL註入,首先要找到可能的註射點;例如,常見的get、post甚至cookie都將參數傳遞給PHP,然後將參數拼接到SQL中。如果後端在收到參數後不進行驗證和過濾,則很可能會發生註入。像xxx.com壹樣?Id=321,Id很可能是註入點。
說白了就是不要相信用戶輸入,嚴格檢查用戶可以控制的參數。註意是嚴格把關的!簡單的空白刪除或特殊字符替換很容易繞過。
如果您已經有了原始代碼,則可以審核代碼並逐壹檢查。您還可以設置壹個本地環境,並使用sqlmap之類的自動化工具來檢測鏈接。
個人理解僅供參考,如有偏頗請批評指正!