DedeCMS-V5.7.91-UTF8后台广告分类管理存在XSS漏洞
字数 1066 2025-08-11 08:36:24
DedeCMS-V5.7.91-UTF8后台广告分类管理XSS漏洞分析与防护指南
漏洞概述
DedeCMS-V5.7.91-UTF8版本的后台广告分类管理功能存在存储型XSS(跨站脚本)漏洞,攻击者可通过构造恶意输入在数据库中植入恶意脚本,当管理员或其他用户查看广告分类时触发执行。
漏洞详情
影响版本
- DedeCMS-V5.7.91-UTF8
漏洞文件
/dede/adtype_main.php
漏洞原理
在adtype_main.php文件中,当$check_new存在且$pname_new不为空时,系统直接将用户输入的$pname_new值插入数据库作为广告类型名称,未进行任何过滤或转义处理。
漏洞代码段:
if(isset($check_new) && $pname_new!='') {
$query = "INSERT INTO `#@__myadtype`(typename) VALUES('{$pname_new}');";
$dsql->ExecuteNoneQuery($query);
}
攻击方式
攻击者可构造如下恶意负载:
"><script>alert('XSS Attack!')</script>
当该值被存储到数据库并随后在页面中显示时,浏览器会将其解析为可执行脚本而非普通文本。
漏洞危害
- 存储型XSS:恶意脚本持久存储在服务器数据库中
- 权限提升:攻击者可窃取管理员会话cookie
- 网站篡改:可修改页面内容或重定向用户
- 恶意软件传播:可植入恶意下载链接
漏洞复现步骤
-
访问后台广告分类管理页面:
http://[目标地址]/DedeCMS-V5.7.91-UTF8/uploads/dede/adtype_main.php -
在广告分类名称字段输入XSS攻击载荷:
"><script>alert(1)</script> -
提交保存后刷新页面,观察是否弹出警告框
修复方案
方案一:输入过滤(推荐)
使用htmlspecialchars函数对输入进行转义:
if(isset($check_new) && $pname_new!='') {
$pname_new = htmlspecialchars($pname_new, ENT_QUOTES, 'UTF-8');
$query = "INSERT INTO `#@__myadtype`(typename) VALUES('{$pname_new}');";
$dsql->ExecuteNoneQuery($query);
}
参数说明:
ENT_QUOTES:转义单引号和双引号UTF-8:指定字符编码
方案二:输出编码
在显示广告分类名称的位置进行HTML编码:
echo htmlspecialchars($row['typename'], ENT_QUOTES, 'UTF-8');
方案三:内容安全策略(CSP)
添加HTTP头限制脚本执行:
Content-Security-Policy: default-src 'self'
防御建议
-
输入验证:
- 对所有用户输入进行严格验证
- 使用白名单机制限制允许的字符
-
输出编码:
- 在数据显示前进行适当的上下文相关编码
- 对HTML、JavaScript、CSS和URL上下文使用不同的编码方式
-
安全函数:
- 使用框架提供的安全函数处理用户输入
- 避免直接拼接SQL语句,使用参数化查询
-
定期更新:
- 及时更新CMS系统和插件到最新版本
- 关注官方安全公告和补丁
扩展知识
XSS类型区分
- 存储型XSS:恶意脚本永久存储在目标服务器上
- 反射型XSS:恶意脚本作为请求的一部分立即返回
- DOM型XSS:通过客户端脚本修改DOM环境触发
其他防护措施
- 设置HttpOnly标志保护cookie
- 实施X-XSS-Protection头
- 使用现代前端框架(如React、Vue)的内置XSS防护
通过以上措施,可有效防范此类XSS漏洞,提升系统安全性。