DedeCMS-V5.7.91-UTF8后台story_books.php存在XSS漏洞
字数 1134 2025-08-24 16:48:06
DedeCMS-V5.7.91-UTF8后台story_books.php XSS漏洞分析与防护指南
漏洞概述
DedeCMS-V5.7.91-UTF8版本的后台管理系统中,story_books.php文件存在跨站脚本(XSS)安全漏洞。该漏洞允许攻击者通过构造特定的恶意输入,在后台管理页面中执行任意JavaScript代码。
受影响版本
- DedeCMS-V5.7.91-UTF8
漏洞位置
/dede/story_books.php文件
漏洞详细分析
漏洞代码段
if($keyword!="") {
$addquery .= " And (b.bookname LIKE '%$keyword%' OR b.author LIKE '%$keyword%') ";
}
$query = " SELECT b.bid,b.catid,b.bookname,b.booktype,b.litpic,b.ischeck,b.postnum,b.senddate,c.id AS cid,c.classname FROM #@ story_books b LEFT JOIN #@ story_catalog c ON c.id = b.catid WHERE b.bid>0 $addquery $orderby ";
漏洞原理
$keyword变量直接拼接进入SQL查询语句,未经过任何过滤或转义处理- 当该变量值被输出到HTML页面时,其中包含的恶意脚本会被浏览器解析执行
- 攻击者可以通过构造包含JavaScript代码的
keyword参数实现XSS攻击
攻击向量示例
http://example.com/DedeCMS-V5.7.91-UTF8/uploads/dede/story_books.php?keyword=%22%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E&catid=0&Submit=%E6%90%9C+%E7%B4%A2
解码后实际参数:
keyword="><script>alert(1)</script>
漏洞复现步骤
- 登录DedeCMS后台管理系统
- 访问
story_books.php页面 - 在搜索框中输入恶意payload:
"><script>alert("XSS")</script> - 提交搜索请求
- 观察页面是否弹出警告框
漏洞危害
- 窃取管理员会话cookie,获取后台权限
- 执行任意后台操作(如添加管理员、修改内容等)
- 植入后门或恶意代码
- 发起钓鱼攻击
- 获取敏感信息
修复方案
方案一:输入过滤
// 使用strip_tags去除HTML标签
$keyword = strip_tags($keyword);
// 或者使用htmlspecialchars转义特殊字符
$keyword = htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');
方案二:使用预定义函数过滤
// 使用filter_input过滤输入
$keyword = filter_input(INPUT_GET, 'keyword', FILTER_SANITIZE_STRING);
方案三:输入验证
// 使用正则表达式验证输入
if (!preg_match('/^[a-zA-Z0-9\x{4e00}-\x{9fa5}]+$/u', $keyword)) {
die('非法输入');
}
方案四:输出编码
// 在输出到HTML前进行编码
echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');
综合修复建议
- 输入过滤:对所有用户输入进行严格过滤
- 参数化查询:使用预处理语句替代直接SQL拼接
- 输出编码:在输出到HTML前进行适当的编码
- 内容安全策略(CSP):实施CSP策略限制脚本执行
- HTTP头安全设置:设置X-XSS-Protection等安全头
防御XSS的通用最佳实践
-
对所有用户输入进行验证和过滤
- 定义允许的字符集
- 使用白名单而非黑名单
- 对特殊字符进行转义
-
使用安全的输出方式
- 根据上下文使用适当的编码(HTML、JavaScript、URL等)
- 使用安全的模板引擎自动转义
-
实施内容安全策略(CSP)
- 限制脚本来源
- 禁止内联脚本
- 报告违规行为
-
设置安全的HTTP头
- X-XSS-Protection
- X-Content-Type-Options
- X-Frame-Options
-
定期安全审计
- 代码审查
- 渗透测试
- 漏洞扫描
总结
DedeCMS-V5.7.91-UTF8后台story_books.php文件存在的XSS漏洞源于未对用户输入进行适当过滤和转义。通过实施严格的输入验证、输出编码和使用安全编程实践,可以有效预防此类漏洞。建议开发者遵循"不信任任何用户输入"的原则,对所有用户提供的数据进行处理后再使用。