新版乐投米兰
  • 公司动态
  • 技术关注
  • 常见问题
  • 联系方式
  • 人才招聘
  • 给我们留言
  • 品牌乐投米兰建设 | B2C/O2O乐投米兰建设 | 域名主机邮箱 | 手机微信乐投米兰 | 乐投米兰重新改版
    Website Construction | B2C/O2O | Domain Host Email | Mobile Site | Website Redesign
    php乐投米兰如何防止sql注入?
    发布时间:2014/3/2   已被7900人阅读    分享到:
     乐投米兰的运行安全肯定是每个站长必须考虑的问题,大家知道,大多数黑客攻击乐投米兰都是采用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.cn7080.com/news/157.html上海乐投米兰建设公司朗晟网络编辑,转发请注明来源及版权归属。