织梦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 拿到数据库账号。
二、修复前必须做的准备
- 完整备份站点目录与数据库,包括
/data/、/uploads/、/templets/; - 记录 PHP 与织梦版本:
echo $cfg_version;或查看/include/common.inc.php; - 开启 Web 访问日志与错误日志,便于修复后回溯是否仍有攻击;
- 用云 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 等老漏洞常见文件路径,若仍可访问说明加固未生效。五、验证修复效果
- 用阿里云、腾讯云的 Web 漏洞扫描对全站做一次扫描,确认高危项清零;
- 查看近 7 天访问日志,搜索
union select、eval(、base64_decode等关键字; - 检查
/uploads/allimg/、/uploads/userup/是否存在新增.php文件; - 登录 mysql 查看
dede_admin表,确认无陌生管理员账号。
六、注意事项
- 补丁包一定要在测试环境验证后再上生产,避免与二次开发模板冲突;
- 第三方插件(如采集侠、问答系统)常是新漏洞入口,升级前先确认插件兼容性;
- 后台路径
/dede/必须改名,否则攻击者可直接爆破管理员; - 修复后修改数据库密码与后台管理员密码,防止攻击者已窃取旧凭证。
织梦漏洞修复不是单点处理,建议建立"补丁—代码加固—服务器隔离—日志监控"四层防线,并保持每月一次的漏洞自查节奏。漏洞修复完成后的第一周是关键观察期,重点跟踪 plus 目录访问与 uploads 目录新增文件,一旦异常立即下线处理。把"及时升级"作为长期习惯,比任何临时加固都更可靠。