凌晨两点半,手机在床头柜上震个不停,群里一位站长发来截图——他的织梦站首页被挂上了赌博跳转代码,标题变成了“午夜福利”,后台密码被人改掉,数据库里甚至多了一张奇怪的表,他不是第一个中招的,也不会是最后一个。
织梦CMS安全运维手册,从漏洞原理到线上加固的生存指南
做织梦(DedeCMS)运维这些年,我见过太多类似的惊魂夜,这个老牌CMS撑起了中国互联网无数个中小站点,但十几年的代码积累和复杂的插件生态,也让它的安全防线像一件缝了太多补丁的旧衣服,今天我以一个常年与织梦漏洞打交道的“老裁缝”身份,把压箱底的“打补丁”手艺全盘托出,别怕,下面每一段,你都看得懂,做得到。
织梦常见的“三道暗门”
普通站长经常困惑:我什么都没干,怎么就被黑了?其实攻击往往发生在一瞬间,利用的往往是这三类“暗门”。
第一道:SQL注入漏洞(最常见)
织梦早期的某些标签(如 mytag、channelid)对输入参数过滤不严,攻击者能在网址后面拼上一段字符,直接对数据库发号施令,最典型的例子是老版本的 /plus/download.php?aid=1 接口,一个空格都可能变成“钥匙孔”,这类漏洞一旦被利用,攻击者可以拖走你的管理员密码哈希,甚至直接把后台管理员账号改成自己的。
第二道:文件上传漏洞(最致命) 后台“附件管理”或会员中心的头像上传功能,如果未严格校验文件后缀和MIME类型,攻击者就能上传一个伪装成图片的PHP一句话木马,这种文件一旦落到服务器上,配合一个可写的目录,就等于把整台服务器的“遥控器”交给了对方。
第三道:后台弱口令与暴力破解
很多站长装完系统后,后台地址还是默认的 /dede/,账号密码还是 admin/admin 或者 admin/123456,黑客用扫号器一晚上能扫几千个站,专门挑这种“门没锁”的进去。
后台安全设置:三分钟“锁门”动作
这一步不需要会代码,登录你的织梦后台,按顺序操作:
- 修改默认后台路径:在根目录改一下
dede文件夹的名字(比如改成myadmin_2024),同时修改data/admin/ver.txt中的随机码,这能挡掉90%的自动扫描流量。 - 更换管理员账号:后台“系统”->“系统用户管理”,新建一个无规律的用户名(如
web_safe_x7),把旧admin账号降权或删除,密码务必16位以上,包含大小写、数字和符号。 - 开启登录验证码并限制重试次数:在
系统基本参数->安全选项中,开启“验证码”,并将“后台登录失败次数限制”设为3次,同时修改data/admin/random.dat文件里的随机密钥,防止跨站请求伪造(CSRF)。 - 关闭不必要的在线更新:织梦官方已停止更新很久,后台那个“在线更新”按钮不要碰,它可能成为漏洞注入的入口,直接禁用
浏览器通知功能。
文件权限与目录加固:把“门”焊死
权限设置是多数站长最头疼的,但只需记住一个原则:能读就别写,能禁就别留。
- 目录权限(Linux服务器):
- 把所有目录权限统一改为
755(可读可执行,不可写)。 - 重点加固:
data和uploads目录改为644(只读)或444,除非你在后台传图片时改成755,传完再改回。 - 根目录下
index.php、tags.php等PHP文件改为644,杜绝被篡改。
- 把所有目录权限统一改为
- 文件权限(Windows IIS):
- 在IIS中给
uploads目录取消“写入”权限,只保留“读取”和“脚本运行”。 - 对
data目录,删除“脚本运行”权限,防止直接执行PHP文件。
- 在IIS中给
- 移除危险文件:
- 删除
/install/目录(安装后必须删)。 - 删除
/plus/下你用不到的文件,download.php、search.php如果不用,直接改名或删除。 - 特别警惕
/data/tplcache/目录,如果里面有.php后缀文件,那基本是后门,立即清空。
- 删除
万一被黑:四步“急诊抢救”方案
如果你已经发现首页被改、后台进不去或网站异常跳转,别慌,按顺序做:
第一步:断网保数据,立刻在服务器面板或虚拟主机控制台启用“只读模式”,或直接拔掉外网网卡(或者改为“维护模式”),目的:防止攻击者继续利用后门修改数据或删除你的备份。
第二步:查时间戳找后门,使用FTP软件连接到网站根目录,按“修改时间”倒序排列文件夹和文件,正常情况下,最近的修改时间都是你刚发布的文章,如果出现某个文件在凌晨被改动,进入文件,看其是否包含 eval、base64_decode、str_rot13 等函数,一旦发现,直接删除。
第三步:恢复核心文件,从你最初的织梦安装包里(或官方原版源码),覆盖覆盖掉 plus、include、dede(已改名的)这三个核心目录,注意:不要覆盖 data 目录下的 config.cache.inc.php 和 sql 文件,否则会丢失数据库配置。
第四步:清洗数据库,登录phpMyAdmin(或主机面板的数据库管理),执行以下SQL(先备份):
UPDATE dede_admin SET pwd = MD5('你新设的强密码') WHERE id = 1;
查找名为 dede_tmp、dede_scores 等非正常表名的表,删除,然后搜索所有写入“


