DedeCMS plus/recommend.php SQL注入漏洞修复教程

一、漏洞说明

该漏洞属于前台SQL注入中危漏洞,存在于DedeCMS推荐位模块,攻击者无需登录,可通过构造恶意推荐位访问请求,触发SQL注入,获取网站数据库信息、篡改推荐位内容,影响网站展示效果和数据安全。

  • 漏洞编号:公开漏洞(无专属CVE/CNVD编号,为全版本通用漏洞)
  • 危害等级:中危
  • 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
  • 漏洞文件:/plus/recommend.php
  • 漏洞场景:前台推荐位展示功能中,程序未对id、mid等参数进行严格过滤,直接代入SQL查询语句,导致攻击者可构造恶意参数触发SQL注入漏洞。

二、代码分析

漏洞核心原因:recommend.php 文件中,对前台传入的id参数(用于指定推荐位ID)未进行任何过滤和类型强转,直接将其代入SQL查询语句,攻击者可构造恶意参数,篡改查询逻辑,实现SQL注入。

关键漏洞代码(原文件片段):

复制代码
<?php
// 原漏洞代码(推荐位查询逻辑)
$id = $_GET['id'];
$sql = "SELECT * FROM `#@__recommend` WHERE id='$id'";
$row = $dsql->GetOne($sql);
// 推荐位展示逻辑...
?>

代码问题分析:

  1. 参数未过滤:id参数直接从GET请求中获取,未进行任何过滤、转义处理,允许传入包含SQL语句的恶意参数;
  2. 类型未强转:id参数应为整数类型(推荐位ID),程序未对其进行intval强转,可传入字符串类型的恶意参数;
  3. 无参数校验:未校验id参数的合法性,攻击者可随意构造参数,查询不存在的推荐位,触发注入漏洞。

漏洞利用示例(仅用于学习,请勿非法测试):

http://你的网站域名/plus/recommend.php?id=1′ UNION SELECT 1,admin,pwd,1 FROM #@__admin--

上述请求可通过注入获取管理员账号和密码,进一步登录后台控制网站,同时也可篡改推荐位内容,植入恶意信息。

三、修复方法(原位修复,不升级、不影响模板)

本修复方案无需升级DedeCMS版本,仅修改recommend.php文件,通过参数强转、合法性校验等方式封堵漏洞,不影响推荐位正常功能,步骤如下:

步骤1:备份漏洞文件

备份 /plus/recommend.php 文件,备份路径示例:/plus/recommend.php.bak,避免修改错误导致推荐位功能异常,便于后续回滚操作,建议使用FTP工具或服务器命令行进行备份,确保备份文件可正常恢复。

步骤2:核心修复(参数强转+过滤)

打开 /plus/recommend.php 文件,找到上述漏洞代码片段,替换为以下修复后的代码,核心是通过类型强转杜绝SQL注入,同时适配原有业务逻辑:

复制代码
<?php
// 修复1:参数强转int,确保id为整数,彻底杜绝SQL注入
$id = intval($_GET['id']);
// 修复2:修改SQL查询语句,适配整数参数,消除注入风险
$sql = "SELECT * FROM `#@__recommend` WHERE id=".$id;
$row = $dsql->GetOne($sql);
// 推荐位展示逻辑...(保留原有代码,不做修改)
?>

步骤3:额外加固(可选,提升安全性)

  1. 添加参数合法性校验:在获取id参数后,添加判断逻辑,禁止空值、负数或非法参数,进一步拦截恶意请求,代码如下:

// 新增:参数合法性校验

if(empty(id) \|\| id <= 0){

exit('非法请求,禁止访问');

}

  1. 过滤其他可控参数:检查recommend.php文件中其他用户可控参数(如mid、type等),若存在未过滤的情况,同样添加intval强转或addslashes过滤,防止连带注入风险;
  2. 限制推荐位访问频率:通过Apache/Nginx配置或代码添加IP限制,禁止单个IP短时间内多次访问推荐位链接,防止攻击者暴力测试和注入尝试。

步骤4:验证修复效果

  1. 访问恶意利用链接:http://你的网站域名/plus/recommend.php?id=1′ and 1=2--,若提示「非法请求,禁止访问」或无有效推荐位展示,则修复生效;
  2. 构造其他恶意参数(如 id=1′ UNION SELECT 1,2,3,4--),无SQL注入现象,且页面无异常报错,修复生效;
  3. 测试正常推荐位功能:访问合法的推荐位链接(如 http://你的网站域名/plus/recommend.php?id=1),可正常展示推荐内容,说明功能未受影响。

四、注意事项

  • 修复后需全面测试推荐位的展示、编辑(后台)、访问等功能,确保无异常,避免影响网站前台展示效果;
  • 若网站推荐位有二次开发(如自定义推荐规则、推荐内容筛选),需确认修改后的代码与二次开发内容无冲突,尤其是涉及id参数的逻辑;
  • 该漏洞为全版本通用漏洞,无论使用哪个版本的DedeCMS,均需进行修复,避免攻击者利用漏洞获取敏感数据;
  • 建议定期检查recommend.php文件,同时排查网站其他plus目录下的文件,避免二次开发或版本更新时重新引入类似注入漏洞;
  • 若修复后出现推荐位无法正常展示的情况,可恢复备份文件,检查代码修改是否有误,或联系技术人员协助排查。

本文由 流觞运维 整理https://www.lnmpweb.cn/archives/7491

相关推荐
Irene199110 分钟前
SQL示例:为什么同样的条件需要重复两次排序
sql
前端技术1 小时前
03_网络层与IP编址:理解网络寻址的核心逻辑
服务器·网络·php
niucloud-admin2 小时前
PHP V6 单商户常见问题——配置了伪静态仍提示接口请求错误,请检查VIE_APP_BASE_URL参数配置或者伪静态配置
php
Ether IC Verifier2 小时前
OSI网络七层协议详细介绍
服务器·网络·网络协议·计算机网络·php·dpu
这儿有一堆花3 小时前
住宅代理(Residential Proxy)技术指南
开发语言·数据库·php
niucloud-admin4 小时前
PHP V6 单商户常见问题——升级提示mkdir()处理方案
php
黄俊懿5 小时前
MySQL主从复制:从“异步“到“GTID“,数据同步的进化之路
数据库·sql·mysql·oracle·架构·dba·db
看海的四叔5 小时前
【SQL】SQL-管好你的字符串
大数据·数据库·hive·sql·数据分析·字符串
@小柯555m6 小时前
MySql(高级操作符--高级操作符练习(2))
数据库·sql·mysql