96SEO 2025-10-24 00:39 0
织梦CMS作为国内主流的建站系统,其album_add.php文件中存在严重的SQL注入漏洞。该漏洞源于对用户输入参数mtypesid未进行严格的整型转义处理,导致攻击者可通过构造恶意请求施行非法SQL语句。漏洞原理,并提供基于钩子技术的巧妙修复方案。
漏洞位于/member/album_add.php文件中,核心问题出现在数据库查询操作前。当用户提交表单时 系统直接拼接用户输入的mtypesid参数到SQL查询语句中,未进行任何类型转换或过滤:

php
// 原始凶险代码
$query = "INSERT INTO dede_archives VALUES ";
攻击者可构造类似mtypesid=1 OR 1=1--的参数,将SQL语句篡改为:
sql
INSERT INTO dede_archives VALUES
由于--注释符会终止后续SQL语句,实际施行效果变为无条件插入操作,导致数据库异常。更凶险的是攻击者可通过UNION查询窃取敏感数据。
传统修复方法仅简单使用intval转换,但存在局限性。我们引入钩子技术实现深度过滤,通过在数据处理前设置拦截层,从根本上杜绝注入风险。
钩子机制允许在数据进入数据库操作前进行预处理, 形成多层防护: 1. 输入验证层验证数据类型和范围 2. 过滤处理层移除凶险字符 3. 转义编码层特殊字符转义
步骤1:创建钩子处理函数
在include/common.inc.php中添加以下平安函数:
php
// 平安处理函数
function safe_mtypesid {
// 1. 强制整型转换
$value = intval;
// 2. 范限验证
if {
ShowMsg;
exit;
}
// 3. 返回处理后的值
return $value;
}
步骤2:在album_add.php中应用钩子 修改原文件约220行处的代码: php // 原始代码 // $description = HtmlReplace;
// 修改后代码 $description = HtmlReplace; // 应用平安钩子 $mtypesid = safe_mtypesid;
步骤3:数据库层加固
在dede_archives表的mtype字段添加触发器:
sql
DELIMITER //
CREATE TRIGGER check_mtype
BEFORE INSERT ON dede_archives
FOR EACH ROW
BEGIN
IF NEW.mtype NOT BETWEEN 1 AND 10 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '非法mtype值';
END IF;
END;//
DELIMITER ;
参数化查询改过
php
$stmt = $dsql->Prepare VALUES ");
$dsql->Execute);
WAF规则配置
在Web应用防火墙中添加规则:
规则名称:织梦注入防护
匹配模式:.*album_add\.php.*mtypesid=.*
动作:拦截
定期平安审计
使用以下命令检测可疑文件:
bash
grep -r "mtypesid" /path/to/dede/member/ --include="*.php"
修复后使用以下Payload测试:
sql
http://site/member/album_add.php?mtypesid=1 OR 1=1
系统将返回"参数错误"提示,证明注入攻击已被拦截。通过sqlmap工具扫描也确认漏洞已修复。
本次修复通过三层防护体系彻底解决SQL注入风险: 1. 钩子函数实现输入验证 2. 触发器保障数据完整性 3. 参数化查询增强防御深度
平安无小事, 织梦用户应定期检查以下关键文件:
- /member/album_add.php
- /member/soft_add.php
- /include/common.inc.php
建议马上施行修复操作,并部署Web应用防火墙进行实时防护。对于生产环境,强烈建议启用织梦官方的最新平安补丁,构建纵深防御体系。
Demand feedback