


织梦CMS在安装完成后,新人往往会直接开始开发使用,忽视了一些安全优化的操作,这样会导致后期整个系统安全系数降低,被黑或者被注入的概率极高,毕竟这世界百分百存在着极多的无聊hacker对全网的网站进行扫描,扫到你这个菜站,尤其是使用率极高的DEDECMS,对你的站点下手的欲望更高,所以在开发前做好安全防范还是很有必要的!
系统安全优化设置之前,做好备份工作。网站备份是网站维护必须必学基础。
安装完成后会有一些文件,可以说是冗余文件,完全没有作用,反而带来被黑的危险,删除即可,以下目录文件均可删除:
①网站后台文件改名:默认后台目录是/dede,需要将这个文件夹的名称修改,比如改为WangZhan123@+,那么后台登陆地址就由www.***.com/dede变为www.***.com/WangZhan123@+,(不定期更改一下)
②后台登录密码请勿使用admin。
①有条件的用户把中data、templets、uploads、a(可删)、special(可删)、images、install(装后删)目录设置为不允许执行脚本,include、plus、dede目录禁止写入,系统将更安全;
②权限设置一般通过主机控制面板,比如阿里云的文件和目录权限设置、西部数码的文件保护等等。
③老版本若登录后台提示验证码错误,选中/data目录,将权限设置为完全控制(可读可写)权限

主机安全防护只针对独立服务器或者VPS。
WIN服务器:可以安装安全狗、『D盾_防火墙』
LINUX服务器:网站防窜改程序、宝塔系统加固;
$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;这是后台文件任意上传漏洞(上面有说删除此文件,如果不删除,需要使用这个功能,那么修改以下代码补掉漏洞)
$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;$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 !');} }return $svar;修改为return addslashes($svar);
$keyword = addslashes(cn_substr($keyword,30));修改为$typeid = intval($typeid); $keyword = addslashes(cn_substr($keyword,30));
$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'";
$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}')");$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' ");;$urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}";修改为 if (preg_match("#}(.*?){/dede:link}{dede:#sim", $servermsg1) != 1) { $urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}"; }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)))
$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)修改为$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)$mtypesid = intval($mtypesid);
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) ."" />";
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) )$order_sn = trim($_GET['out_trade_no']);修改为$order_sn = trim(addslashes($_GET['out_trade_no']));
if(isset($GLOBALS['arrs1']))修改为$arrs1 = array(); $arrs2 = array(); if(isset($GLOBALS['arrs1']))
$litpic =$oldlitpic;修改为$litpic =$oldlitpic; if (strpos( $litpic, '..') !== false || strpos( $litpic, $cfg_user_dir."/{$userid}/" ) === false) exit('not allowed path!');<!--<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>
<iframe name="showad" src="index_body.php?dopost=showad" frameborder="0" width="100%" id="showad" frameborder="0" scrolling="no" marginheight="5"></iframe>
SendData($hash);//321行SendData($hash,2);//527行
else if($typeid == 999){}//将{}里的以及上面的else全部删除if(file_exists($cachefile) && (filemtime($cachefile) + 60 * 30) > time())修改为if(file_exists($cachefile) && filesize($cachefile) > 10)
$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;}$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);
① linux主机的用户一般都是apache环境,使用 .htaccess 文件来设置,如果你网站根目录已经存在这个文件,那就复制一下代码添加进去。
RewriteEngine on#安全设置 禁止以下目录运行指定php脚本RewriteCond % !^$RewriteRule a/(.*).(php)$ – [F]RewriteRule data/(.*).(php)$ – [F]RewriteRule templets/(.*).(php|htm)$ – [F]RewriteRule uploads/(.*).(php)$ – [F]
②:windows主机的用户一般都是iis7、iis8环境,使用 web.config 文件来设置,请确认你的主机已经开启了伪静态而且网站根目录有 web.config 文件,有这个文件的可以复制以下代码添加到对应的rules内。
<rule name="Block data" stopProcessing="true"> <match url="^data/(.*).php$" /> <conditions logicalGrouping="MatchAny"> <add input="{USER_AGENT}" pattern="data" /> <add input="{REMOTE_ADDR}" pattern="" /> </conditions> <action type="AbortRequest" /></rule><rule name="Block templets" stopProcessing="true"> <match url="^templets/(.*).php$" /> <conditions logicalGrouping="MatchAny"> <add input="{USER_AGENT}" pattern="templets" /> <add input="{REMOTE_ADDR}" pattern="" /> </conditions> <action type="AbortRequest" /></rule><rule name="Block SomeRobot" stopProcessing="true"> <match url="^uploads/(.*).php$" /> <conditions logicalGrouping="MatchAny"> <add input="{USER_AGENT}" pattern="SomeRobot" /> <add input="{REMOTE_ADDR}" pattern="" /> </conditions> <action type="AbortRequest" /></rule>③:Nginx下禁止指定目录运行PHP脚本
注意:这段配置文件一定要放在 location ~ .php(.*)$ 的前面才可以生效,配置完后记得重启Nginx生效。
location ~* /(a|data|templets|uploads)/(.*).(php)$ {return 403;}
测试有没有生效,可以随便创建一个PHP文件传到uploads文件夹下,执行:域名/uploads/测试文件.php 如果不能打开说明生效。
迄今为止,我们发现的恶意脚本文件有:
1:检查有无/data/cache/t.php、/data/cache/x.php和/plus/index.php这些木马文件,有的话则立即删除
2:plus 目录木马
plus/90sec.phpplus/ac.php plus/config_s.php plus/config_bak.php plus/diy.php (系统文件)plus/ii.php plus/lndex.php data/cache/t.php data/cache/x.phpdata/cache/mytag-*.htmdata/config.php data/cache/config_user.php data/config_func.phpinclude/taglib/shell.lib.phpinclude/taglib/*.lib.php
大多数被上传的脚本集中在plus、data、data/cache、include这几个目录下,请仔细检查这几个目录下最近是否有被上传异常文件。
软件使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的WebShell后门行为。
引擎特别针对,一句话后门,变量函数后门,${}执行 ,`执行,
preg_replace执行,call_user_func,file_put_contents,fputs 等特殊函数
的参数进行针对性的识别,能查杀更为隐藏的后门,
并把可疑的参数信息展现在你面前,让你能更快速的了解后门的情况
新版特别针对 dedecms 的{dede:php}{/dede:php}代码加入了识别!
软件加入隔离功能,并且可以还原!
如有不能识别的webshell请使用上传样本功能上传给我们,我们将后期加入识别!
下载:http://www.d99net.net/down/WebShellKill_V1.4.1.zip

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