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