反射型xss漏洞必须出现在服务端将用户输入未经处理直接拼入html响应的位置,如$_get['name']未编码输出到hello, 中,传入alert(1)即可触发。

反射型 XSS 漏洞必须出现在服务端将用户输入(如 $_GET、request.getParameter()、req.query)未经处理直接拼入 HTML 响应的位置;只要没经过编码或上下文适配就输出,基本就可判定存在风险。
看输出点是否在 HTML 文本节点中
这是最常见也最容易漏掉的场景:后端取了 URL 参数,直接用 echo 或 response.getWriter().write() 插入到两个标签之间,比如 <p>Hello, <?php echo $_GET['name']; ?></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill3458" title="html-ppt-to-pdf"><img
src="https://img.php.cn/upload/skill/000/000/081/178956546773641.jpg" alt="html-ppt-to-pdf" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill3458" title="html-ppt-to-pdf" class="overflowclass">html-ppt-to-pdf</a>
<p class="overflowclass">将使用 `<section class="slide">` 约定的 HTML 幻灯片转换为高保真、矢量文本 PDF(使用 Playwright + Chromium 原生 PDF 功能)。</p>
</div>
<a rel="nofollow" href="/xiazai/skill3458" title="html-ppt-to-pdf" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>。此时攻击者传入 name=<script>alert(1)</script> 就能触发。
- 检查所有模板文件中
echo、print、out.print()、res.write()等输出语句,确认其参数是否来自用户可控输入 - 注意闭合关系:如果输出被双引号包裹(如
<input value="<?php echo $_GET['q']; ?>">),则需构造闭合引号的 payload,例如q=" onfocus="alert(1) - 不要只盯
<script></script>标签——<img src="x" onerror="alert(1)">同样有效,且更难被正则过滤捕获
查 URL 参数是否被写进事件属性或 JS 字符串
很多反射型漏洞藏在前端 JS 里,但源头仍是服务端拼接。比如 PHP 输出:<script>var q = "<?php echo $_GET['q']; ?>";</script>,这时 q 变量会进入 JS 执行上下文," 闭合后即可注入任意 JS 代码。
- 搜索模板中
<script></script>标签内含echo/print的位置,尤其是赋值给变量或拼进字符串字面量的地方 - 警惕 JSON 输出未转义:若后端用
json_encode($_GET['data'])但没加JSON_HEX_QUOT | JSON_HEX_TAG,仍可能绕过(如含\u2028换行符) - 注意 CSP 影响:即使有
script-src 'self',若使用eval()、setTimeout(string)、new Function()动态执行,依然可绕过
验证时别等后端响应,直接改 DOM 测试
反射型 XSS 的关键特征是“请求即触发”,不需要登录、不依赖存储,所以验证成本极低——浏览器开发者工具里手动修改 DOM 就能快速确认是否可利用。
- 打开 DevTools → Elements 面板,找到疑似输出点,右键 Edit as HTML,插入
<img src="x" onerror="alert(1)">,看是否弹窗 - 对 URL 参数,直接在地址栏改值,例如把
?id=123改成?id="><svg onload="alert(1)"></svg>,观察是否生成对应 HTML 片段 - 遇到
href或src属性拼接,尝试javascript:alert(1),注意现代浏览器会拦截,但旧版或禁用 CSP 时仍生效
真正容易被忽略的是那些看似“只是显示文字”的位置——比如错误提示页的 <h2>找不到页面:<?php echo $_GET['path']; ?>
</h2>,或者 404 页面中把原始 URL 写进 document.title。只要输出路径没做上下文感知的编码(HTML 节点 vs 属性 vs JS 字符串 vs URL),就不是“看起来安全”,而是“刚好还没被利用”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










