阿喆的博客空间 > 技术分享 > 织梦程序 >

织梦防sql 注入

 作者:阿喆 时间:2017-08-09

    dedecms的漏洞一直很多,dedecms防止sql注入的办法也很多,我这种是专门为防止会员信息暴露的,主要是改造include/common.inc.php下的检查和注册外部提交的变量代码,让它可以防止别人恶意获取会员和管理员信息,代码如下:

    if (!defined('DEDEREQUEST'))
{
    //检查和注册外部提交的变量   (2011.8.10 修改登录时相关过滤)
    function CheckRequest(&$val) {
        if (is_array($val)) {
            foreach ($val as $_k=>$_v) {
                if($_k == 'nvarname') continue;
                CheckRequest($_k);
                CheckRequest($val[$_k]);
            }
        } else
        {
            if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE|_SESSION)#',$val)  )
            {
                exit('Request var not allow!');
            }
        }
    }

    //var_dump($_REQUEST);exit;
    CheckRequest($_REQUEST);
    CheckRequest($_COOKIE);

     //防止sql爆破注册,过滤掉包含敏感字段的变量/2017/8/9
    function checkSqlKeyword($val)
    {
        if( strlen($val)>0 && (strpos("c".$val,'__admin') || strpos("c".$val,'__member')))
        {
           exit('Request var not allow!');
        }
    }


    foreach(Array('_GET','_POST','_COOKIE') as $_request)
    {
        foreach($$_request as $_k => $_v)
        {
             checkSqlKeyword($_v);
            if($_k == 'nvarname') ${$_k} = $_v;
            else ${$_k} = _RunMagicQuotes($_v);
        }
    }
}