php網(wǎng)站如何防止sql注入? |
發(fā)布時間:2015-12-03 13:16:48???已被 923 人閱讀????分享到: |
網(wǎng)站的運行安全肯定是每個站長必須考慮的問題,大家知道,大多數(shù)黑客攻擊網(wǎng)站都是采用sql注入,這就是我們常說的為什么 ? 最原始的靜態(tài)的網(wǎng)站反而是最安全的。今天我們講講PHP注入的安全規(guī)范,防止自己的網(wǎng)站被sql注入。 如今主流的網(wǎng)站開發(fā)語言還是php,那我們就從php網(wǎng)站如何防止sql注入開始說起: Php注入的安全防范通過上面的過程,我們可以了解到php注入的原理和手法,當(dāng)然我們也同樣可以制定出相應(yīng)該的防范方法: 首先是對服務(wù)器的安全設(shè)置,這里主要是php+mysql的安全設(shè)置和linux主機的安全設(shè)置。對php+mysql注射的防范,首先將magic_quotes_gpc設(shè)置為On,display_errs設(shè)置為Off,如果id型,我們利用intval()將其轉(zhuǎn)換成整數(shù)類型,如代碼: $idintval($id); mysql_query”*fromexamplewherearticieid’$id’”;或者這樣寫:mysql_query(”SELECT*FROMarticleWHEREarticleid”.intval($id).”") 如果是字符型就用addslashes()過濾一下,然后再過濾”%”和”_”如: $searchaddslashes($search); $searchstr_replace(“_”,”_”,$search); $searchstr_replace(“%”,”%”,$search); 當(dāng)然也可以加php通用防注入代碼: /************************* PHP通用防注入安全代碼 說明: 判斷傳遞的變量中是否含有非法字符 如$_POST、$_GET 功能: 防注入 **************************/ //要過濾的非法字符 $ArrFiltratearray(”‘”,”;”,”union”); //出錯后要跳轉(zhuǎn)的url,不填則默認前一頁 $StrGoUrl”"; //是否存在數(shù)組中的值 functionFunStringExist($StrFiltrate,$ArrFiltrate){ feach($ArrFiltrateas$key>$value){ if(eregi($value,$StrFiltrate)){ returntrue; } } returnfalse; } //合并$_POST和$_GET if(function_exists(array_merge)){ $ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS); }else{ feach($HTTP_POST_VARSas$key>$value){ $ArrPostAndGet[]$value; } feach($HTTP_GET_VARSas$key>$value){ $ArrPostAndGet[]$value; } } //驗證開始 feach($ArrPostAndGetas$key>$value){ if(FunStringExist($value,$ArrFiltrate)){ echo“alert(/”Neeao提示,非法字符/”);”; if(empty($StrGoUrl)){ echo“histy.go(-1);”; }else{ echo“window.location/”".$StrGoUrl.”/”;”; } exit; } } ?> /************************* 復(fù)制代碼 保存為checkpostget.php 然后在每個php文件前加include(“checkpostget.php“);即可 **************************/ 另外將管理員用戶名和密碼都采取md5加密,這樣就能有效地防止了php的注入。 還有服務(wù)器和mysql也要加強一些安全防范。 對于linux服務(wù)器的安全設(shè)置: 加密口令,使用“/usr/sbin/authconfig”工具打開密碼的shadow功能,對passwd進行加密。 禁止訪問重要文件,進入linux命令界面,在提示符下輸入: #chmod600/etc/inetd.conf//改變文件屬性為600 #chattr+I /etc/inetd.conf //保證文件屬主為root #chattr–I /etc/inetd.conf //對該文件的改變做限制 禁止任何用戶通過su命令改變?yōu)閞oot用戶 在su配置文件即/etc/pam.d/目錄下的開頭添加下面兩行: Auth sufficient /lib/security/pam_rootok.sodebug Auth required /lib/security/pam_whell.sogroupwheel 刪除所有的特殊帳戶 #userdel lp等等刪除用戶 #groupdellp等等刪除組 禁止不使用的suid/sgid程序 #find/-typef(-perm-04000 -o–perm-02000)-execls–lg{}; http://hi.baidu.com/bigideaer/bl ... 7e76e11a4cffd0.html 判斷傳遞的變量中是否含有非法字符我們把以下代碼放到一個公共的文件里,比如security.inc.php里面,每個文件里都include一下這個文件,那么就能夠給任何一個程序進行提交的所有變量進行過濾了,就達到了我們一勞永逸的效果。 簡述:/************************* 說明: 判斷傳遞的變量中是否含有非法字符 如$_POST、$_GET 功能:防注入 **************************/ 代碼如下: //要過濾的非法字符 $ArrFiltratearray("",";","union"); //出錯后要跳轉(zhuǎn)的url,不填則默認前一頁 $StrGoUrl""; //是否存在數(shù)組中的值 functionFunStringExist($StrFiltrate,$ArrFiltrate){ feach($ArrFiltrateas$key>$value){ if(eregi($value,$StrFiltrate)){ returntrue; } } returnfalse; } //合并$_POST和$_GET if(function_exists(array_merge)){ $ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS); }else{ feach($HTTP_POST_VARSas$key>$value){ $ArrPostAndGet[]$value; } feach($HTTP_GET_VARSas$key>$value){ $ArrPostAndGet[]$value; } } //驗證開始 feach($ArrPostAndGetas$key>$value){ if(FunStringExist($value,$ArrFiltrate)){ echo"alert("非法字符");"; if(emptyempty($StrGoUrl)){ echo"histy.go(-1);"; }else{ echo"window.location"".$StrGoUrl."";"; } exit; } } ?> 復(fù)制代碼 保存為checkpostget.php 然后在每個php文件前加include(“checkpostget.php“);即可 方法2 代碼如下: /*過濾所有GET過來變量*/ feach($_GETas$get_key>$get_var) { if(is_numeric($get_var)){ $get[strtolower($get_key)]get_int($get_var); }else{ $get[strtolower($get_key)]get_str($get_var); } } /*過濾所有POST過來的變量*/ feach($_POSTas$post_key>$post_var) { if(is_numeric($post_var)){ $post[strtolower($post_key)]get_int($post_var); }else{ $post[strtolower($post_key)]get_str($post_var); } } /*過濾函數(shù)*/ //整型過濾函數(shù) functionget_int($number) { returnintval($number); } //字符串型過濾函數(shù) functionget_str($string) { if(!get_magic_quotes_gpc()){ returnaddslashes($string); } return$string; } 復(fù)制代碼 第一個是對數(shù)據(jù)進行轉(zhuǎn)義的方法 第二個方法寫在單獨的文件里,引入每一個PHP文件內(nèi) 就可以實現(xiàn)對每一個數(shù)據(jù)進行轉(zhuǎn)義處理了 functionsaddslashes($string){ if(is_array($string)){ feach($stringas$key>$val){ $string[$key]saddslashes($val); } }else{ $stringaddslashes($string); } return$string; } ################################################################# $magic_quoteget_magic_quotes_gpc(); if(empty($magic_quote)){ $_GETsaddslashes($_GET); $_POSTsaddslashes($_POST); } ? |
上一條:如何來選擇一款優(yōu)質(zhì)的主機 | 【關(guān)閉】 |
下一條:農(nóng)資企業(yè)如何選擇適合的進銷存軟件 |