(此图片来源于网络,如有侵权,请联系删除! )
织梦CMS在安装完成后,新人往往会直接开始开发使用,忽视了一些安全优化的操作,这样会导致后期整个系统安全系数降低,被黑或者被注入的概率极高,毕竟这世界百分百存在着极多的无聊hacker对全网的网站进行扫描,扫到你这个菜站,尤其是使用率极高的DEDECMS,对你的站点下手的欲望更高,所以在开发前做好安全防范还是很有必要的!
安全设置前:备份网站文件及数据库
系统安全优化设置之前,做好备份工作。网站备份是网站维护必须必学基础。
安全设置一:删文件
安装完成后会有一些文件,可以说是冗余文件,完全没有作用,反而带来被黑的危险,删除即可,以下目录文件均可删除:
目录删除原因
/install
安装后的余留文件,没用,整个文件夹删除
/member
会员功能文件,大数企业站没用,文件夹删除,若需要会员功能的就不能删
/special
专题功能,如果你不需要这个功能,文件夹删除,需要就别删,大部分是不需要的
/tags.php
TAG标签,没有此功能可删除
网站后台目录dede要删除的文件删除原因
/dede/tpl.php
文件上传管理系统文件,易被挂马,强烈建议删除或者不用时请改名(tpl备用.php)
/dede/templets_*.php
模板管理功能,老手建议删除,使用FTP管理
/dede/media_*.php
附件数据管理功能文件,易被挂马,删除(用你的FTP管理文件就可以了,别用这个)
/dede/file_*.php
文件式管理器功能控制器文件,易被挂马,删除(用你的FTP管理文件就可以了,别用这个)
/dede/mytag_*.php、mytag_tag_*.php
自定义标记管理,易被上传一句话木马
/dede/story_*.php
小说功能,可删除
/dede/erraddsave.php
纠错功能,可删除
/dede/feedback_*.php
评论管理,可删除
/dede/group_*.php
圈子功能,很少用到,可删除
/dede/co_*.php
采集控制文件,可删除
/dede/cards_*.php
点卡功能功能,可删除
/dede/ad_*.php
广告管理添加/删除文件,企业站一般不用可删除
/dede/spec_*.php
专题管理,没有专题页面,可删除
/dede/vote_*.php
投票功能,可删除
/dede/sys_sql_query.php
SQL命令运行器,不需要的话可以改名为(sys_sql_query安全禁用.php)也可以删除
目录/plus要删除的文件删除原因(正常的企业站可以只保留list.php、view.php、count.php、search.php、diy.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
投票
安全设置二:后台目录及账号密码修改
①网站后台文件改名:默认后台目录是/dede,需要将这个文件夹的名称修改,比如改为WangZhan123@+,那么后台登陆地址就由www.xxx.com/dede变为www.xxx.com/WangZhan123@+,(不定期更改一下)
②后台登录密码请勿使用admin。
安全设置三:目录权限设置
①有条件的用户把中 data、templets、uploads、a(可删)、special(可删)、images、install(装后删)目录设置为不允许执行脚本,include、plus、dede目录禁止写入,系统将更安全;
②权限设置一般通过主机控制面板,比如阿里云的文件和目录权限设置、西部数码的文件保护等等。
③老版本若登录后台提示验证码错误,选中/data目录,将权限设置为完全控制(可读可写)权限
(此图片来源于网络,如有侵权,请联系删除! )
安全设置四:主机安全防护
主机安全防护只针对独立服务器或者VPS。
WIN服务器:可以安装安全狗、『D盾_防火墙』
LINUX服务器:网站防窜改程序、宝塔系统加固;
安全设置五:任意文件上传漏洞
①、漏洞文件① /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;
②、漏洞文件 /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;
③、漏洞文件 /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注入漏洞
①、漏洞文件 /include/filter.inc.php (大概在46行)
return $svar; 修改为 return addslashes($svar);
②、漏洞文件 /plus/search.php (大概在109行)
$keyword=addslashes(cn_substr($keyword,30)); 修改为 $typeid=intval($typeid); $keyword=addslashes(cn_substr($keyword,30));
③、漏洞文件 /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\'\";
④、漏洞文件 /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}\')\");
⑤、漏洞文件 /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\' \");;
⑥、漏洞文件 /member/soft_add.php (大概在154行)
$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} \"; }
⑦、漏洞文件 /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)))
⑧、漏洞文件 /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);
⑨、漏洞文件 /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) .\"\" />\";
⑩、漏洞文件 /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) )
⑪、漏洞文件 /include/payment/alipay.php (支付模块注入漏洞,此漏洞织梦官方在最新的版本中已经修复)
$order_sn=trim($_GET[\'out_trade_no\']); 修改为 $order_sn=trim(addslashes($_GET[\'out_trade_no\']));
⑫、漏洞文件 /include/dedesql.class.php (大概在590行)
if(isset($GLOBALS[\'arrs1\'])) 修改为 $arrs1=array(); $arrs2=array(); if(isset($GLOBALS[\'arrs1\']))
⑬、漏洞文件 /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!\');
安全设置五:无用文件中的风险代码删除
① dede empletslogin_ad.htm(这是织梦默认后台登陆界面的广告代码,没用,删除以下这段代码)
<!--<script type=\"text/javascript\" src=http://www.dede58.com/a/dedeaz/\"<?php echo UPDATEHOST;?>/dedecms/loginad.<?php echo $cfg_soft_lang; ?>.js\"></script>--> <div class=\"dede-ad\"> <ul> <script type=\"text/javascript\"src=http://www.dede58.com/a/dedeaz/\"http://ad.dedecms.com/adsview/?action=single&key=admcploginad&charset=gbk\"></script> </ul> </div>
② dede empletsindex_body.htm(织梦的后台首页模板文件,删除以下这段广告代码)
<iframe name=\"showad\" src=http://www.dede58.com/a/dedeaz/\"index_body.php?dopost=showad\" frameborder=\"0\" width=\"100%\" id=\"showad\" frameborder=\"0\" scrolling=\"no\" marginheight=\"5\"></iframe>
③ dedemodule_main.php(向织梦官网发送卸载或安装插件的信息,若服务器配置不高,或不支持采集(下载),那会卡死!注释掉以下代码)
SendData($hash);//321行 SendData($hash,2);//527行
④ include agliblink.lib.php(织梦官方友链上传的代码,没有用,删除,否则占用性能,甚至卡死)
else if($typeid==999) { } //将{}里的以及上面的else全部删除
⑤ includededemodule.class.php(版本检测代码,30分钟一次,要扫描文件的!为什么管理模块打不开的原因就在这里,网站配置低的,卡死!)
if(file_exists($cachefile) && (filemtime($cachefile) + 60 * 30) > time()) 修改为 if(file_exists($cachefile) && filesize($cachefile) > 10)
⑥ includededesql.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; }
⑦ includecommon.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);
安全设置六:利用伪静态功能禁止以下目录运行php脚本
① 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.php plus/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.php data/cache/mytag-*.htm data/config.php data/cache/config_user.php data/config_func.php include/taglib/shell.lib.php include/taglib/*.lib.php
大多数被上传的脚本集中在plus、data、data/cache、include这几个目录下,请仔细检查这几个目录下最近是否有被上传异常文件。
推荐D盾—WEB查看工具:
软件使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的WebShell后门行为。
引擎特别针对,一句话后门,变量函数后门,${}执行 ,`执行,
preg_replace执行,call_user_func,file_put_contents,fputs 等特殊函数
的参数进行针对性的识别,能查杀更为隐藏的后门,
并把可疑的参数信息展现在你面前,让你能更快速的了解后门的情况
新版特别针对 dedecms 的{dede:php}{/dede:php}代码加入了识别!
软件加入隔离功能,并且可以还原!