标题: register.php 中 event_id 参数导致的反射型跨站脚本(XSS)漏洞
厂商 / 仓库: PuneethReddyHC / event-management
受影响版本: 1.0(测试时为 master 分支/标签)
报告人: Hafiz Pradana Gemilang
披露状态: 已私下通知厂商 — 为保障用户安全,暂不公开漏洞利用 PoC。
状态和时间线将在协调或补丁发布后更新。
在 register.php 中发现了一个**反射型跨站脚本(XSS)**漏洞,其中 event_id GET 参数在反射到页面输出之前未经过适当的清理。
远程攻击者可以构造一个恶意 URL,一旦受害者访问或被重定向到该链接,即可在受害者的浏览器中执行任意 JavaScript。
⚠️ 本公告有意省略有效的漏洞利用载荷。
完整的概念验证已私下提供给厂商,用于补丁开发。
/register.php?event_id=<value>
示例(本地测试):
http://<host>/event-management-master/register.php?event_id=1
成功利用可在受影响域名的上下文中执行任意 JavaScript。
潜在后果:
HttpOnly)预估 CVSS v3.1 评分: 6.1(中危)— AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N
event_id 参数中包含 JavaScript 载荷的 URL。完整的载荷和概念验证已私下分享给厂商。
如果您是维护者且需要访问权限,请联系报告人(见下文)。
应用服务端验证和输出编码以防止反射型 XSS。
输入验证
如果 event_id 是数字类型,请强制执行数字验证:
$event_id = filter_input(INPUT_GET, 'event_id', FILTER_VALIDATE_INT);
if ($event_id === false) {
// 处理无效输入
}
输出编码
在将用户提供的数据打印到 HTML 之前进行转义:
echo htmlspecialchars($event_id, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
使用安全框架或模板
优先选择能够自动执行上下文感知转义的框架。
安全 Cookie
在会话 cookie 上设置 HttpOnly、Secure 和 SameSite 标志。
内容安全策略(CSP)
应用严格的 CSP,并避免使用 unsafe-inline。
代码审查与审计
检查整个应用程序中所有其他反射参数。
// 验证数字输入
$event_id = filter_input(INPUT_GET, 'event_id', FILTER_VALIDATE_INT);
if ($event_id === false || $event_id === null) {
$event_id = 0; // 或显示错误 / 重定向
}
// 安全输出
?>
<span id="event-id"><?= htmlspecialchars($event_id, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></span>
<?php
htmlspecialchars() 文档: https://www.php.net/manual/en/function.htmlspecialchars.php报告人: Hafiz Pradana Gemilang
本公告省略了详细的漏洞利用代码,以保护受影响软件的用户。
根据负责任披露条款,完整的技术细节可应要求提供给厂商或授权协调方。