双色求基本走势带坐标彩吧助手
双色球带坐标连走势图 大乐透走势图(带坐标) 体坛网大乐透走势图带坐标9188 排列五走势图表带坐标 大乐透走式连线坐标图 双色球走势图坐标带连线走势图带连线 福利彩票基本走势图带坐标 大乐透带坐标走试图 大乐透带连线坐标走势图 球坐标系的图像 3d坐标走势图放大的 福彩500走势图带坐标 双色球跨度带坐标 排列五坐标走势图带连线 36选7期走势图带坐标
新版網站
php網站如何防止sql注入?
發布時間:2014/3/2   已被6877人閱讀    分享到:
 網站的運行安全肯定是每個站長必須考慮的問題,大家知道,大多數黑客攻擊網站都是采用sql注入,這就是我們常說的為什么 ?

最原始的靜態的網站反而是最安全的。今天我們講講PHP注入的安全規范,防止自己的網站被sql注入。

如今主流的網站開發語言還是php,那我們就從php網站如何防止sql注入開始說起:

Php注入的安全防范通過上面的過程,我們可以了解到php注入的原理和手法,當然我們也同樣可以制定出相應該的防范方法:

首先是對服務器的安全設置,這里主要是php+mysql的安全設置和linux主機的安全設置。對php+mysql注射的防范,首先將magic_quotes_gpc設置為On,display_errs設置為Off,如果id型,我們利用intval()將其轉換成整數類型,如代碼:

$idintval($id);

mysql_query”*fromexamplewherearticieid’$id’”;或者這樣寫:mysql_query(”SELECT*FROMarticleWHEREarticleid”.intval($id).”")

如果是字符型就用addslashes()過濾一下,然后再過濾”%”和”_”如:

$searchaddslashes($search);

$searchstr_replace(“_”,”\_”,$search);

$searchstr_replace(“%”,”\%”,$search);

當然也可以加php通用防注入代碼:

/*************************

PHP通用防注入安全代碼

說明:

判斷傳遞的變量中是否含有非法字符

如$_POST、$_GET

功能:

防注入

**************************/

//要過濾的非法字符

$ArrFiltratearray(”‘”,”;”,”union”);

//出錯后要跳轉的url,不填則默認前一頁

$StrGoUrl”";

//是否存在數組中的值

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;

}

}

?>

/*************************

復制代碼

保存為checkpostget.php

然后在每個php文件前加include(“checkpostget.php“);即可

**************************/

另外將管理員用戶名和密碼都采取md5加密,這樣就能有效地防止了php的注入。

還有服務器和mysql也要加強一些安全防范。

對于linux服務器的安全設置:

加密口令,使用“/usr/sbin/authconfig”工具打開密碼的shadow功能,對passwd進行加密。

禁止訪問重要文件,進入linux命令界面,在提示符下輸入:

#chmod600/etc/inetd.conf//改變文件屬性為600

#chattr+I /etc/inetd.conf //保證文件屬主為root

#chattr–I /etc/inetd.conf //對該文件的改變做限制

禁止任何用戶通過su命令改變為root用戶

在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");

//出錯后要跳轉的url,不填則默認前一頁

$StrGoUrl"";

//是否存在數組中的值

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;

}

}

?>

復制代碼

保存為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);

}

}

/*過濾函數*/

//整型過濾函數

functionget_int($number)

{

returnintval($number);

}

//字符串型過濾函數

functionget_str($string)

{

if(!get_magic_quotes_gpc()){

returnaddslashes($string);

}

return$string;

}

復制代碼

第一個是對數據進行轉義的方法

第二個方法寫在單獨的文件里,引入每一個PHP文件內

就可以實現對每一個數據進行轉義處理了

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);

}
本文分享地址:http://www.suvzn.live/news/157.html上海網站建設公司朗晟網絡編輯,轉發請注明來源及版權歸屬。
上一篇:上海朗晟網絡公司2014年春節放假通知 【關閉】
下一篇:祝賀上海章泉離心機技術有限公司網站成功上線!
双色求基本走势带坐标彩吧助手
双色球带坐标连走势图 大乐透走势图(带坐标) 体坛网大乐透走势图带坐标9188 排列五走势图表带坐标 大乐透走式连线坐标图 双色球走势图坐标带连线走势图带连线 福利彩票基本走势图带坐标 大乐透带坐标走试图 大乐透带连线坐标走势图 球坐标系的图像 3d坐标走势图放大的 福彩500走势图带坐标 双色球跨度带坐标 排列五坐标走势图带连线 36选7期走势图带坐标
一波六码网站 销售博客 内蒙古时时彩今日开奖 浙江十一选五走势图一 128捕鱼电玩城 百赢棋牌游戏官网 广西十一选五开奖数据 腾讯棋牌合集 幸运飞艇稳赚不赔方式 002573股票分析