# 1 代码注入XSS

⚡ 30 秒速记

  • XSS 是把恶意脚本注入到页面并在其他用户的浏览器里执行,核心危害是窃取 cookie/token、冒充用户操作
  • 三类:存储型(存进数据库,影响所有访问者,危害最大)、反射型(在 URL 参数里,需诱导点击)、DOM 型(纯前端,服务端日志里查不到)
  • 根本防线是输出编码而不是输入过滤 —— 同一份数据在 HTML/属性/JS/URL 里的转义规则完全不同
  • 富文本必须服务端白名单净化DOMPurify 这类),前端过滤只是体验层 —— 攻击者可以直接调接口绕过
  • 纵深防御:HttpOnly cookie(脚本偷不走)、CSP(禁内联和外链脚本)、框架默认转义(JSX/模板)

XSS 是攻击者把恶意代码注入网页,使它在其他用户浏览器中执行的一类代码注入漏洞。 常见形式可以归为反射型、存储型和 DOM-based:反射型通常随请求内容返回,存储型会被页面持久展示,DOM-based 则发生在前端对数据的处理过程中。它通常会夹带恶意 HTML 或客户端脚本,因此凡是展示外部输入的页面,都不能直接把内容当成可信代码执行。

跨网站指令码(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及使用者端脚本语言

XSS 分为三种:反射型,存储型和 DOM-based

# 1.1 如何攻击

⚡ 30 秒速记

  • 反射型:恶意参数随请求进入响应,受害者点击特制链接后当场执行
  • 存储型:载荷写入评论、工单或昵称,之后访问该页面的用户都会中招
  • DOM XSS:服务端响应可能完全正常,前端把 locationpostMessage 等数据送进危险 sink
  • 常见 sink 包括 innerHTMLouterHTMLdocument.write 和字符串形式的 setTimeout
  • 判断主线是追踪“不可信输入 → 是否进入可执行上下文”,不能只搜索 <script>

XSS 的攻击方式,是把不可信输入混进页面的 HTML 节点或脚本上下文,让浏览器把它当成代码执行。 比如页面从 URL 读取 name 参数后直接渲染,攻击者就能在特制链接里塞入 <script>。受害者打开链接时,脚本会随页面内容执行,这类情况可视为反射型或 DOM-based XSS。排查时不能只看参数有没有传入,还要看它最终是否进入了可执行的页面位置。

  • XSS 通过修改 HTML节点或者执行 JS代码来攻击网站。
  • 例如通过 URL 获取某些参数
<!-- http://www.domain.com?name=<script>alert(1)</script> -->
<div>{{name}}</div>    

上述 URL 输入可能会将 HTML 改为 <div><script>alert(1)</script></div> ,这样页面中就凭空多了一段可执行脚本。这种攻击类型是反射型攻击,也可以说是 DOM-based 攻击

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部