织梦DEDECMS系统的安全优化设置及漏洞修复大全_防止网站被黑(持续更新)

织梦DEDECMS安装后的安全优化设置

织梦CMS在安装完成后,新人往往会直接开始开发使用,忽视了一些安全优化的操作,这样会导致后期整个系统安全系数降低,被黑或者被注入的概率极高,毕竟这世界百分百存在着极多的无聊hacker对全网的网站进行扫描,扫到你这个菜站,尤其是使用率极高的DEDECMS,对你的站点下手的欲望更高,所以在开发前做好安全防范还是很有必要的!

安全设置一:删文件

安装完成后会有一些文件,可以说是冗余文件,完全没有作用,反而带来被黑的危险,删除即可,以下目录文件均可删除:

目录删除原因
/install安装后的余留文件,没用,整个文件夹删除
/member会员功能文件,大数企业站没用,文件夹删除,若需要会员功能的就不能删
/special专题功能,如果你不需要这个功能,文件夹删除,需要就别删,大部分是不需要的
网站后台目录dede要删除的文件删除原因
/dede/media_edit.php、media_main.php附件数据管理功能文件,易被挂马,删除(用你的FTP管理文件就可以了,别用这个)
/dede/file_manage_control.php、file_manage_main.php、file_manage_view.php、file_pic_view.php文件式管理器功能控制器文件,易被挂马,删除(用你的FTP管理文件就可以了,别用这个)
/dede/templets/file_edit.htm、/dede/templets/file_manage_main.htm、 /dede/templets/file_pic_view.htm文件式管理器功能模板文件,配合删除(用你的FTP管理文件就可以了,别用这个)
/dede/sys_sql_query.phpSQL命令运行器,不需要的话也可以删除
/dede/tag.phptag功能,不需要的话也可以删除
目录/plus要删除的文件删除原因(正常的企业站可以只保留list.php、view.php、count.php、flink.php、flink_add.php五个文件以及img文件夹,其他全部删除)
/plus/guestbook留言簿模块,大数企业站没用,文件夹删除,以防SQL注入,若需要留言功能的就不能删
/plus/task和task.php计划任务控制文件,文件夹和文件都删除
/plus/bookfeedback.php、bookfeedback_js.php图书评论和评论调用文件,存在注入漏洞,不安全
/plus/bshare.php分享插件
/plus/ad_js.php广告插件
/plus/car.php、posttocar.php、carbuyaction.php购物车
/plus/comments_frame.php调用评论,存在安全漏洞
/plus/digg_ajax.php、digg_frame.php顶踩
/plus/download.php、disdls.php下载和次数统计
/plus/erraddsave.php纠错
/plus/feedback.php、feedback_ajax.php、feedback_js.php评论
/plus/stow.php内容收藏
/plus/vote.php投票

安全设置二:漏洞修复

一、任意文件上传漏洞

  1. 漏洞文件① /include/dialog/select_soft_post.php
$fullfilename = $cfg_basedir.$activepath.'/'.$filename;
修改为
if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) {
	ShowMsg("你指定的文件名被系统禁止!",'javascript:;');
	exit();
}
$fullfilename = $cfg_basedir.$activepath.'/'.$filename;
  1. 漏洞文件② /dede/media_add.php
    这是后台文件任意上传漏洞(上面有说删除此文件,如果不删除,需要使用这个功能,那么修改以下代码补掉漏洞)
$fullfilename = $cfg_basedir.$filename;
修改为
if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) { 
				ShowMsg("你指定的文件名被系统禁止!",'javascript:;'); 
				exit(); 
  } 
$fullfilename = $cfg_basedir.$filename;
  1. 漏洞文件③ /include/uploadsafe.inc.php (修改两个地方)
$image_dd = @getimagesize($$_key);
修改为
$image_dd = @getimagesize($$_key); if($image_dd == false){ continue; }
${$_key.'_size'} = @filesize($$_key);}
修改为
${$_key.'_size'} = @filesize($$_key);}
$imtypes = array("image/pjpeg", "image/jpeg", "image/gif", "image/png", "image/xpng", "image/wbmp", "image/bmp"); 
if(in_array(strtolower(trim(${$_key.'_type'})), $imtypes)) { $image_dd = @getimagesize($$_key); if($image_dd == false){ continue; } 
if (!is_array($image_dd)) { exit('Upload filetype not allow !');} }

二、SQL注入漏洞

  1. 漏洞文件① /include/filter.inc.php (大概在46行)
return $svar;
修改为
return addslashes($svar);
  1. 漏洞文件② /plus/search.php (大概在109行)
$keyword = addslashes(cn_substr($keyword,30));
修改为
$typeid = intval($typeid); $keyword = addslashes(cn_substr($keyword,30));
  1. 漏洞文件③ /member/mtypes.php (大概在71行)
$query = "UPDATE `dede_mtypes` SET mtypename='$name' WHERE mtypeid='$id' AND mid='$cfg_ml->M_ID'";
修改为
$id = intval($id); $query = "UPDATE `dede_mtypes` SET mtypename='$name' WHERE mtypeid='$id' AND mid='$cfg_ml->M_ID'";
  1. 漏洞文件④ /member/pm.php文件 (大概在65行)
$row = $dsql->GetOne("SELECT * FROM `dede_member_pms` WHERE id='$id' AND (fromid='{$cfg_ml->M_ID}' OR toid='{$cfg_ml->M_ID}')");
修改为
$id = intval($id); $row = $dsql->GetOne("SELECT * FROM `dede_member_pms` WHERE id='$id' AND (fromid='{$cfg_ml->M_ID}' OR toid='{$cfg_ml->M_ID}')");
  1. 漏洞文件⑤ /plus/guestbook/edit.inc.php (大概在55行)
$dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
修改为
$msg = addslashes($msg); $dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");;
  1. 漏洞文件⑥ /member/soft_add.php (大概在154行)
$urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}\r\n";
修改为     
if (preg_match("#}(.*?){/dede:link}{dede:#sim", $servermsg1) != 1) 
{ $urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}\r\n"; }
  1. 漏洞文件⑦ /member/article_add.php (大概在83行,cookies泄漏导致SQL漏洞)
if (empty($dede_fieldshash) || $dede_fieldshash != md5($dede_addonfields.$cfg_cookie_encode))
修改为
if (empty($dede_fieldshash) || ( $dede_fieldshash != md5($dede_addonfields . $cfg_cookie_encode) && $dede_fieldshash != md5($dede_addonfields . 'anythingelse' . $cfg_cookie_encode))) 
  1. 漏洞文件⑧ /member/album_add.php (大约220行,对输入参数mtypesid未进行int整型转义,导致SQL注入发生)
$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)
修改为
$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)
$mtypesid = intval($mtypesid);
  1. 漏洞文件⑨ /member/inc/inc_archives_functions.php (大概在239行,cookies泄漏导致SQL漏洞)
echo "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"".md5($dede_addonfields.$cfg_cookie_encode)."\" />";
修改为
echo "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"". md5($dede_addonfields . 'anythingelse' .$cfg_cookie_encode) ."\" />";
  1. 漏洞文件⑩ /include/common.inc.php (SESSION变量覆盖导致SQL注入漏洞,最新的版本中已经修复)
if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )
修改为
if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE|_SESSION)#',$svar) )
  1. 漏洞文件⑪ /include/payment/alipay.php (支付模块注入漏洞,此漏洞织梦官方在最新的版本中已经修复)
$order_sn = trim($_GET['out_trade_no']);
修改为
$order_sn = trim(addslashes($_GET['out_trade_no']));
  1. 漏洞文件⑫ /include/dedesql.class.php (大概在590行)
if(isset($GLOBALS['arrs1']))
修改为
$arrs1 = array(); $arrs2 = array(); if(isset($GLOBALS['arrs1']))

如果之前定义过 a r r s 1 或 arrs1或 arrs1arrs2的,请调整比对代码

  1. 漏洞文件⑬ /member/inc/archives_check_edit.php (大概第92行,dedecms前台任意文件删除(需要会员中心),发表文章处,对于编辑文章的时候图片参数处理不当,导致了任意文件删除)
$litpic =$oldlitpic;
修改为
$litpic =$oldlitpic; 
if (strpos( $litpic, '..') !== false || strpos( $litpic, $cfg_user_dir."/{$userid}/" ) === false) exit('not allowed path!');

三、无用文件中的风险代码删除

  1. \dede\templets\login_ad.htm(这是织梦默认后台登陆界面的广告代码,没用,删除以下这段代码)
<!--<script type="text/javascript" src="<?php echo UPDATEHOST;?>/dedecms/loginad.<?php echo $cfg_soft_lang; ?>.js"></script>-->
<div class="dede-ad">
  <ul>
    <script type="text/javascript"src="http://ad.dedecms.com/adsview/?action=single&key=admcploginad&charset=gbk"></script>
  </ul>
</div>
  1. \dede\templets\index_body.htm(织梦的后台首页模板文件,删除以下这段广告代码)
<iframe name="showad" src="index_body.php?dopost=showad" frameborder="0" width="100%" id="showad" frameborder="0" scrolling="no"  marginheight="5"></iframe>
  1. \dede\module_main.php(向织梦官网发送卸载或安装插件的信息,若服务器配置不高,或不支持采集(下载),那会卡死!注释掉以下代码)
SendData($hash);//321行
SendData($hash,2);//527行
  1. \include\taglib\flink.lib.php(织梦官方友链上传的代码,没有用,删除,否则占用性能,甚至卡死)
else if($typeid == 999)
{
}
//将{}里的以及上面的else全部删除
  1. \include\dedemodule.class.php(版本检测代码,30分钟一次,要扫描文件的!为什么管理模块打不开的原因就在这里,网站配置低的,卡死!)
if(file_exists($cachefile) && (filemtime($cachefile) + 60 * 30) > time())
修改为
if(file_exists($cachefile) && filesize($cachefile) > 10)
  1. \include\dedesql.class.php(下面这段代码会给网站加友情链接及版权"Power by DedeCms",删除)
$arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79);
$arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20,0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e);

//特殊操作
$arrs1 = array(); $arrs2 = array(); if(isset($GLOBALS['arrs1']))
{
    $v1 = $v2 = '';
    for($i=0;isset($arrs1[$i]);$i++)
    {
        $v1 .= chr($arrs1[$i]);
    }
    for($i=0;isset($arrs2[$i]);$i++)
    {
        $v2 .= chr($arrs2[$i]);
    }
    $GLOBALS[$v1] .= $v2;
}
  1. \include\common.func.php(会给网站加版权的,删除)
$arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79);
$arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72,
0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20,
0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e);

安全设置三:目录修改

  1. 网站后台文件改名:默认后台目录是/dede,需要将这个文件夹的名称修改,比如改为login,那么后台登陆地址就由www.xxx.com/dede变为www.xxx.com/login
  2. /data/文件夹移到Web访问目录外(来自dedecms官方建议):
    -将/data/文件夹移至根目录的上一级目录
    -修改配置文件:/include/common.inc.php中DEDEDATA变量
define('DEDEDATA', DEDEROOT.'/data');
修改为
define('DEDEDATA',DEDEROOT.'/../data');
  1. 目录权限设置
    /data/templets/uploads这几个目录去掉写的权限
    ②网站根目录设置为755权限(即www权限),这样子根目录下的所有文件夹均为755权限
    ③老版本若登录后台提示验证码错误,选中/data目录,将权限设置为完全控制(可读可写)权限
  2. 目录保护:为防止木马被上传执行,使用控制面板中的“目录保护”功能(大部分控制面板都有这个功能,一些安全软件也有),依次选择/templates/uploads/data这三个目录添加保护(以禁止脚本执行,防止黑客上传木马)
  3. 针对data文件夹的名称修改
  • 修改 data文件夹名称为 data#7080,这一步非常关键
  • 之后在data#7080 文件夹中加入 .htaccess ,文件内容 deny from all,意思是将这个文件夹的权限设置为只读权限
  • 之后需要修改首页文件/index.php和全局公用引入文件/include/comm.inc.php ,将其中的/data全部替换为 /data#7080
  • 之后修改整个网站项目所有文件中的含有/data这个目录的代码,勾选“匹配整个站点”,替换为 /data#7080。
  • (注意,涉及替换代码的文件很多,建议一个个文件替换过去,以免出现失误;如果没有将/include/data 目录改名为 /include/data#7080,那么需要手动检查替换,以免错误).
    织梦系统中将data文件夹改名的步骤

安全设置四:使用第三方安全插件

可下载第三方防护插件,例如:360出品的“织梦CMS安全包” 、百度旗下安全联盟出品的“DedeCMS顽固木马后门专杀”;
本人推荐百度旗下安全联盟出品的“DedeCMS顽固木马后门专杀
**下载地址:**https://download.csdn.net/download/weilapls/10655074
**前提工作:**注意下载文件到本地,解压后用“编辑器”(可直接用window系统’记事本’打开)打开dede_killer_v2.php 修改密码(默认密码不让登陆!),如果你的dedecms设置了data目录,请对应修改后保存。
**安装方式:**解压>上传至网站根目录(一般是wwwroot)
打开方式: http://你的网站地址/dede_killer_v2.php
注意
1.跟目录下必须有data目录和/data/common.inc.php文件,如不存在会报“请将该文件放到您站点的根目录,和index.php同一级目录”错误。
2.文件太多执行时间较长,可能超时,可以修改ini_set(“memory_limit”, “100m”)值为ini_set(“memory_limit”, “500m”),最大不能超过1000M。

安全设置四:可移文件检查删除

  • 用dedecms后台“系统”中的文件校验和病毒扫描功能查杀病毒木马
  • 检查有无/data/cache/t.php/data/cache/x.php/plus/index.php 这些木马文件,有的话则立即删除
  • 重点查看/plus/config_s.php, 此为dedecms里面的流量攻击脚本。

更新于2018-12-01,后期有更新,将会持续更新本文

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值