一、漏洞说明该漏洞属于前台复合型漏洞同时存在XSS跨站脚本和SQL注入风险存在于DedeCMS评论模块攻击者无需登录可通过提交恶意评论内容触发XSS攻击劫持用户Cookie、植入恶意广告或SQL注入获取数据库信息、篡改评论数据危害范围较广。漏洞类型XSS跨站脚本、SQL注入危害等级高危复合型漏洞危害叠加影响版本DedeCMS 全版本含V5.7 SP2 ~ 5.7.118及衍生版本漏洞文件/plus/comment.php漏洞场景前台评论提交、评论展示功能中程序未对评论内容、评论相关参数进行过滤和转义导致XSS和SQL注入漏洞。二、代码分析漏洞核心原因comment.php 文件中存在两处核心漏洞点1. 评论内容content未进行转义处理直接存储和展示导致XSS攻击2. 评论相关参数如aid、cid未进行过滤直接代入SQL查询导致SQL注入漏洞。关键漏洞代码原文件片段?php // 原漏洞代码评论提交展示逻辑存在XSS和SQL注入 // 1. SQL注入漏洞aid、cid参数未过滤 $aid $_POST[aid]; $cid $_POST[cid]; $content $_POST[content]; // 直接将未过滤的aid、cid代入SQL存在注入风险 $sql INSERT INTO #__comment (aid, cid, content, addtime) VALUES ($aid, $cid, $content, .time().); $dsql-ExecuteNoneQuery($sql); // 2. XSS漏洞评论内容未转义直接展示 $row $dsql-GetOne(SELECT content FROM #__comment WHERE id$id); echo 评论内容.$row[content]; // 未转义触发XSS ?代码问题分析SQL注入问题aid、cid参数直接从POST请求中获取未进行过滤、转义或intval强转可传入包含SQL语句的恶意参数篡改查询逻辑XSS问题评论内容content未进行转义处理直接存储到数据库展示时也未进行转义攻击者可提交包含恶意脚本的评论劫持用户Cookie、植入恶意内容无参数校验未对aid、cid、content等参数进行合法性校验允许传入空值或恶意内容进一步放大漏洞危害。漏洞利用示例仅用于学习请勿非法测试// XSS利用提交评论内容为 scriptalert(document.cookie)/script展示时触发脚本执行// SQL注入利用提交aid1′ UNION SELECT 1,2,admin,pwd FROM #__admin–触发注入获取管理员信息三、修复方法原位修复不升级、不影响模板本修复方案无需升级DedeCMS版本仅修改comment.php文件通过过滤内容、转义特殊字符同时封堵XSS和SQL注入漏洞不影响评论功能正常使用步骤如下步骤1备份漏洞文件备份 /plus/comment.php 文件备份路径示例/plus/comment.php.bak避免修改错误导致评论功能异常便于后续回滚操作。步骤2核心修复过滤内容、转义特殊字符打开 /plus/comment.php 文件找到上述漏洞代码片段替换为以下修复后的代码核心是过滤注入参数、转义XSS相关特殊字符?php // 修复1过滤SQL注入参数aid、cid进行intval强转 $aid intval($_POST[aid]); $cid intval($_POST[cid]); // 修复2转义评论内容过滤XSS特殊字符禁止恶意脚本 $content htmlspecialchars($_POST[content], ENT_QUOTES); // 转义特殊字符防止XSS $content addslashes($content); // 过滤SQL注入特殊字符 // 修复3修改SQL插入语句适配过滤后的参数消除注入风险 $sql INSERT INTO #__comment (aid, cid, content, addtime) VALUES (.$aid., .$cid., .$content., .time().); $dsql-ExecuteNoneQuery($sql); // 修复4评论展示时再次转义双重防护XSS $id intval($_GET[id]); $row $dsql-GetOne(SELECT content FROM #__comment WHERE id.$id); echo 评论内容.htmlspecialchars($row[content], ENT_QUOTES); // 转义后展示防止XSS ?步骤3额外加固可选提升安全性添加参数合法性校验在获取所有参数后添加判断逻辑禁止空值、负数或非法内容代码如下// 新增参数合法性校验if(empty($aid) || $aid 0 || empty($cid) || $cid 0 || empty($content)){exit(‘非法请求禁止提交空评论或无效参数’);}限制评论内容长度添加评论内容长度限制如1-500字禁止提交过长的恶意内容代码如下if(strlen($content) 1 || strlen($content) 500){exit(‘评论内容长度需在1-500字之间’);}过滤敏感关键词添加敏感词过滤逻辑禁止提交包含恶意脚本、违法违规内容的评论进一步防范XSS和恶意攻击。步骤4验证修复效果XSS验证提交评论内容为 展示时恶意脚本被转义不执行修复生效SQL注入验证提交aid1′ UNION SELECT 1,2,3–cid1无注入现象评论提交失败或提示非法请求修复生效正常评论验证提交合法评论内容可正常存储和展示说明功能未受影响。四、注意事项修复后需全面测试评论的提交、展示、删除若有等功能确保无异常同时确认评论内容中的特殊字符如、可正常显示转义后不影响阅读若网站评论模块有二次开发如评论审核、评论回复需确认修改后的代码与二次开发内容无冲突尤其是涉及评论内容处理的逻辑该漏洞为全版本通用漏洞且属于复合型漏洞危害较大无论使用哪个版本的DedeCMS均需优先修复建议定期清理评论区的异常评论避免攻击者通过遗留的恶意评论触发漏洞。本文由 流觞运维 整理https://www.lnmpweb.cn/archives/7495