DedeCms做为国内使用最为广泛使用人数最多的CMS之一,经常爆出漏洞,每个漏洞的爆出,影响都是一大片,轻则被人挂广告、弹框,重则服务器成为肉机,宝贵数据丢失。那么有什么办法可以提高DedeCms的安全性呢?" D% B9 U6 `0 ?& J9 y3 X8 I
先来看看原因吧,为什么PHP程序经常出漏洞,其实是由PHP程序本身决定的。PHP可复用性低,导致程序结构错综复杂,到处是冗余代码,这样不仅利于漏洞的产生,还影响漏洞的修得;PHP程序入门简单且普遍开源,导致很多人都可直接阅读代码,搜寻漏洞;这样便有源源不断的漏洞被发现、被修复、被发现……。而当前流行的PHP系统习惯用以文件形式做为缓存,这样就需要开放文件的写权限,这无疑成为PHP系统的软肋。目前针对PHP系统的攻击方式,除了已经很少出现的“注入”攻击外,大部分攻击都是通过系统的某个漏洞,向可写文件里插入一句话木马,以此方式获得shell。
5 A; D5 I8 t, t7 A! \1 J l网站安全从来都是服务器配置、文件权限控制和网站程序三者的相互配合,今天主要看看如果对DedeCms网站程序的改进来提高安全性。“可执行的文件不允许被修改,可写文件不允许被访问”这是网站权限控制的根本原则,网站程序在“可写文件不允许被访问”方面可做许多工作。就拿DedeCMS来说,我们可以在如下几个方式做好保护。
; @ w, g! Q6 L' k1 |. D1、改名根目录下的data目录,或者移动到网站目录外面, i8 @6 |; E! \$ r h" s9 G
data目录便是最藏污纳垢的地方,系统经常要往这个目录写数据,这个目录下的任何一个文件又都可以通过URL访问到,所以要让浏览器访问不到里面的文件,就需要将此目录改名,或者移动到网站的目录外面去。这些,即使别人通过漏洞往文件里写进了一句话木马,他也找不到此木马所在的文件路径,无法继续展开攻击。因为DedeCMS程序的不合理,导致改名data目录动作会比较大,具体做法如下:
( G+ w# _( [1 x; l# P1 R( @/ ea. 将公开的内容迁移到pub目录(或者其它自定义目录)下,如rss、sitemap、js、enum等,此步骤需要移动文件夹,并修改这些文件的生成路径
+ k/ P6 ?: b1 @7 [) p( r8 zb. 修改引用程序目录
o2 J5 [! E. K; }9 W搜索替换“DEDEDATA.“/data/” 为 “DEDEDATA.”/”,大概替换五六十个地方;
, @, ]: _/ v; r$ {4 [6 E6 p+ C% K搜索替换“DEDEDATA.‘/data/” 为 “DEDEDATA.’/”,大概替换五六十个地方;' T+ r; P: m. Q( |& h
搜索“/data/”,按具体情况,修改路径类似成为:“$DEDEDATA.“/”(注意include目录和后台管理目录都有data文件夹,不需要修改);
* y, Z" _( F6 @c. 修改data文件夹名称,并修改include/common.inc.php文件里的“DEDEDATA”的值,再在后台系统设置》参数设置里修改模板缓存目录,即可修改完成。以后也可以按照此步骤来更改data文件夹名称。5 L0 ?# G( Y, @
2、改名“dede”管理目录,并加固
+ G6 ?. j" v3 k* d0 H如果把后台隐藏好了,即使别人获得了你的管理员账号、密码,他也无从登录。
( @0 ~) D0 z/ M+ X% W7 n# ^- |a.在/dede/config.php里,找到如下行:
( j) r8 l. N3 i, D以下为引用的内容:, m* W2 D; B& x6 k/ W$ ] c) `
1 //检验用户登录状态
: ^! S; D$ V3 u0 Q% a! g# }. x! T2 $cuserLogin = new userLogin();9 n8 @/ {, k- P6 Y' ?
3 if($cuserLogin->getUserID()==-1)
$ M& t7 o, v v* S4 {& d8 @5 S: r3 h+ R9 S0 N/ k
5 header("location:login.php?gotopage=".urlencode($dedeNowurl));$ H8 H: E$ g' l# l+ `: w
6 }( V" x. r- {* N) H, _/ P3 }
0 y8 ^6 O* _" O | ( i' u6 `7 D, Q8 P% Z- S$ S7 Z: c
把上面代码,改为:
$ U4 n; e4 |, {- E以下为引用的内容:) M& j: p+ e1 R0 v( ~1 E
1 //检验用户登录状态8 }7 K! N" }" ^
2 $cuserLogin = new userLogin();" }! \* l) h& G" C
3 if($cuserLogin->getUserID()==-1)
( ^0 [% l) y& D! C0 o- W3 O4 {
! P) M/ @/ I+ }/ R: Y) C5 //header("location:login.php?gotopage=".urlencode($dedeNowurl));: R6 r' X. S; W- i" M+ e
6 header("HTTP/1.0 404 Not Found");# ~/ R$ W4 R5 {
7 exit();* Y+ ^9 J& M" \) H" s, k
8 }6 Y8 p% d7 H' \. j' p8 c8 Z
b$ h( q( n8 H2 y# d0 \2 X
|
6 a5 n) h$ `7 }. Z# lb.修改/dede/login.php的文件名称,并对应的修改/dede/templets/login.htm里的表单提交地址;8 ^: ]1 V6 D8 M* W
c.修改/dede/的目录名称; H8 `& n5 B" K0 L
这样,别人在没有登录前,只能访问/dede/login.php改名后的地址,访问其他地址均会获得404错误。
( z, M `* q2 F/ N+ A8 o3 V5 @当然,做了安全加固后,以后DedeCMS的升级就会有一些麻烦。& Z8 `$ |3 m: r0 ]; B
原文地址:http://www.cnblogs.com/flashlm/archive/2009/09/26/dedecms-security-reinforced.html d" Z" P2 `# r/ Y0 _8 x
注:相关网站建设技巧阅读请移步到建站教程频道。 |
|