织梦cms漏洞怎么修复

织梦CMS因历史代码量大、用户基数高,长期是攻击者重点扫描目标。常见漏洞集中在 SQL 注入、任意文件上传、模板注入、目录穿越与后台越权几类。修复织梦漏洞不能只靠打补丁,还要从代码层、配置层、服务器层三处下手,才能形成有效防护闭环。

一、织梦常见漏洞类型

1. SQL 注入

多发生在 /plus/ 目录的反馈、评论、统计脚本中,未对 $typeid$aid 等参数做整型转换或过滤,攻击者可拼接 UNION 查询拖库。

2. 任意文件上传

/plus/upload.php/include/dialog/select_media.php 等上传组件未校验 MIME 与扩展名,可上传 .php.phtml.htaccess 导致 webshell。

3. 模板注入与 RCE

织梦模板引擎 {dede:php}{/dede:php} 标签若在模板中被开启,或后台"系统设置"允许模板内 PHP,攻击者写入模板即可执行任意代码。

4. 路径泄露与目录穿越

/plus/recommend.php/plus/stoa.php 等老脚本存在 ../ 跨目录读取风险,可直接读取 /data/common.inc.php 拿到数据库账号。

二、修复前必须做的准备

  1. 完整备份站点目录与数据库,包括 /data//uploads//templets/
  2. 记录 PHP 与织梦版本:echo $cfg_version; 或查看 /include/common.inc.php
  3. 开启 Web 访问日志与错误日志,便于修复后回溯是否仍有攻击;
  4. 用云 WAF 或本地 modsecurity 规则先做一层防护,为修复争取时间。

三、关键漏洞修复操作

1. 升级到最新安全版本

织梦官方会针对高危漏洞发布补丁包,第一时间应用:

# 备份后覆盖补丁
cd /www/wwwroot/dede
unzip dedecms_patch_latest.zip -d ./patch_tmp
cp -rf ./patch_tmp/* ./
# 进入后台执行数据库升级 SQL
mysql -u root -p dedecms < patch.sql

2. 关闭模板 PHP 执行

编辑 /include/dedetemplate.class.php,禁用 php 标签:

// 查找 $this->tags['php']
// 注释或删除 php 标签解析逻辑
// 同时后台"系统基本参数—其他选项"
// "模板引擎禁用标签"填入:php

3. 收紧 plus 目录

仅保留必要脚本,其余删除或重命名:

cd /www/wwwroot/dede/plus
# 删除冗余攻击面
rm -f download.php ad_js.php car.php carbuyaction.php
rm -f posttocar.php infosearch.php erraddsave.php
# 保留必需的 search.php list.php view.php diy.php

4. 加固上传校验

修改 /include/uploadsafe.class.php,强制白名单校验:

$cfg_upload_type='jpg|jpeg|gif|png|bmp|webp|pdf|zip|doc|docx';
// 删除对 .phtml .phar .htaccess 的允许
// 增加 MIME 与扩展名一致性校验
$ext=strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if(strpos($cfg_upload_type, $ext)===false) exit('上传类型禁止');
if(!in_array($_FILES['file']['type'], $allow_mime)) exit('MIME 禁止');

5. 参数整型化与过滤

所有从 GET/POST 取入参的地方,强制类型:

$aid=isset($aid) ? intval($aid) : 0;
$typeid=isset($typeid) ? intval($typeid) : 0;
$keyword=htmlspecialchars(trim($keyword), ENT_QUOTES);
$keyword=addslashes($keyword); // 老版本 PHP 未开启 magic_quotes 时

四、服务器层加固

  • Nginx 禁止 uploads 目录执行 PHP:location ~* /uploads/.*\.(php|php5|phtml)$ { deny all; }
  • data 目录禁止外网访问:location ^~ /data/ { deny all; }
  • templets 目录禁止直接访问:location ^~ /templets/ { deny all; }
  • PHP 关闭危险函数:disable_functions=exec,system,passthru,shell_exec,proc_open,popen
  • 开启 open_basedir 限制 PHP 可访问目录范围。
修复完成后立即访问 /data/mysql_error_trace.inc/data/limit.txt 等老漏洞常见文件路径,若仍可访问说明加固未生效。

五、验证修复效果

  1. 用阿里云、腾讯云的 Web 漏洞扫描对全站做一次扫描,确认高危项清零;
  2. 查看近 7 天访问日志,搜索 union selecteval(base64_decode 等关键字;
  3. 检查 /uploads/allimg//uploads/userup/ 是否存在新增 .php 文件;
  4. 登录 mysql 查看 dede_admin 表,确认无陌生管理员账号。

六、注意事项

  • 补丁包一定要在测试环境验证后再上生产,避免与二次开发模板冲突;
  • 第三方插件(如采集侠、问答系统)常是新漏洞入口,升级前先确认插件兼容性;
  • 后台路径 /dede/ 必须改名,否则攻击者可直接爆破管理员;
  • 修复后修改数据库密码与后台管理员密码,防止攻击者已窃取旧凭证。
织梦漏洞修复不是单点处理,建议建立"补丁—代码加固—服务器隔离—日志监控"四层防线,并保持每月一次的漏洞自查节奏。漏洞修复完成后的第一周是关键观察期,重点跟踪 plus 目录访问与 uploads 目录新增文件,一旦异常立即下线处理。把"及时升级"作为长期习惯,比任何临时加固都更可靠。