DedeCms做为国内使用最为广泛使用人数最多的CMS之一,经常爆出漏洞,每个漏洞的爆出,影响都是一大片,轻则被人挂广告、弹框,重则服务器成为肉机,宝贵数据丢失。那么有什么办法可以提高DedeCms的安全性呢?' j9 A" C9 _9 K
先来看看原因吧,为什么PHP程序经常出漏洞,其实是由PHP程序本身决定的。PHP可复用性低,导致程序结构错综复杂,到处是冗余代码,这样不仅利于漏洞的产生,还影响漏洞的修得;PHP程序入门简单且普遍开源,导致很多人都可直接阅读代码,搜寻漏洞;这样便有源源不断的漏洞被发现、被修复、被发现……。而当前流行的PHP系统习惯用以文件形式做为缓存,这样就需要开放文件的写权限,这无疑成为PHP系统的软肋。目前针对PHP系统的攻击方式,除了已经很少出现的“注入”攻击外,大部分攻击都是通过系统的某个漏洞,向可写文件里插入一句话木马,以此方式获得shell。
7 Q$ n r& s& T2 A* ` l- Q网站安全从来都是服务器配置、文件权限控制和网站程序三者的相互配合,今天主要看看如果对DedeCms网站程序的改进来提高安全性。“可执行的文件不允许被修改,可写文件不允许被访问”这是网站权限控制的根本原则,网站程序在“可写文件不允许被访问”方面可做许多工作。就拿DedeCMS来说,我们可以在如下几个方式做好保护。
! |" u3 s: }- ?( l9 K; J: Z0 a1、改名根目录下的data目录,或者移动到网站目录外面
5 q; C& K( [! X8 Ydata目录便是最藏污纳垢的地方,系统经常要往这个目录写数据,这个目录下的任何一个文件又都可以通过URL访问到,所以要让浏览器访问不到里面的文件,就需要将此目录改名,或者移动到网站的目录外面去。这些,即使别人通过漏洞往文件里写进了一句话木马,他也找不到此木马所在的文件路径,无法继续展开攻击。因为DedeCMS程序的不合理,导致改名data目录动作会比较大,具体做法如下:
( o2 |" r8 s1 U6 V' ?a. 将公开的内容迁移到pub目录(或者其它自定义目录)下,如rss、sitemap、js、enum等,此步骤需要移动文件夹,并修改这些文件的生成路径- G1 a' z X$ i8 F
b. 修改引用程序目录. F8 ]3 z8 z8 F7 K1 q: F
搜索替换“DEDEDATA.“/data/” 为 “DEDEDATA.”/”,大概替换五六十个地方;# H9 T0 D6 C5 f/ E* Y. C) a
搜索替换“DEDEDATA.‘/data/” 为 “DEDEDATA.’/”,大概替换五六十个地方;
# [& d4 |: n# ], y7 g搜索“/data/”,按具体情况,修改路径类似成为:“$DEDEDATA.“/”(注意include目录和后台管理目录都有data文件夹,不需要修改);1 z0 }4 A; s1 J/ n
c. 修改data文件夹名称,并修改include/common.inc.php文件里的“DEDEDATA”的值,再在后台系统设置》参数设置里修改模板缓存目录,即可修改完成。以后也可以按照此步骤来更改data文件夹名称。
) _# a+ `& H5 l9 j! D; M% D# n' M2、改名“dede”管理目录,并加固
7 u3 X$ A% C8 ]( X/ A a3 J如果把后台隐藏好了,即使别人获得了你的管理员账号、密码,他也无从登录。1 Z" |2 k3 P1 @6 ?+ W5 V2 L
a.在/dede/config.php里,找到如下行:
" m, J C8 N2 v; W5 s以下为引用的内容:4 L2 k. \$ O$ {
1 //检验用户登录状态
^* c+ W. A: K0 j: T2 T2 $cuserLogin = new userLogin();
5 F y+ l* ~5 l& d) u; a7 d3 if($cuserLogin->getUserID()==-1)
/ M, z$ g8 `$ z' V6 C+ u4 {+ X* G# d& K/ L# B( V- @3 y. P
5 header("location:login.php?gotopage=".urlencode($dedeNowurl));' t- i/ ]; ?2 V1 R2 {7 } n$ C
6 }
% r5 n, ?: g1 T4 T ) i1 I, @$ m( S/ L$ v
|
# ]: A; t; p% b* F8 {把上面代码,改为:. d* k4 ~ T5 r. D
以下为引用的内容:+ T( k0 b4 ?9 |" [, k/ Y' d; C( C, u* m
1 //检验用户登录状态+ s5 l, p- k# ?
2 $cuserLogin = new userLogin();
& k, H/ e9 C5 p5 j# _& X+ K: k% K3 if($cuserLogin->getUserID()==-1)0 x- q5 r1 S k$ ?
4 {
3 e6 \ l9 f7 w0 I; n! \5 //header("location:login.php?gotopage=".urlencode($dedeNowurl));
: h# V9 ?: F! F6 header("HTTP/1.0 404 Not Found");
) R2 P1 R9 O- I8 m; M# \7 exit();7 P. L- j" ^. _. E
8 }
/ t( J; ~: k0 s& l1 e4 t7 U
P$ {. g; m# W& L: o# } | & W" P, W; {1 ^# [
b.修改/dede/login.php的文件名称,并对应的修改/dede/templets/login.htm里的表单提交地址;
, @2 m; D$ |$ i! R! }& c+ G8 G- Lc.修改/dede/的目录名称;( J: W6 u1 s- t
这样,别人在没有登录前,只能访问/dede/login.php改名后的地址,访问其他地址均会获得404错误。0 G! d6 V' I( i5 ~$ L: ^
当然,做了安全加固后,以后DedeCMS的升级就会有一些麻烦。
" h& G9 E$ g/ Y' c( P$ ?/ [原文地址:http://www.cnblogs.com/flashlm/archive/2009/09/26/dedecms-security-reinforced.html: n5 t0 F) Y8 n/ G& e
注:相关网站建设技巧阅读请移步到建站教程频道。 |
|