# 1 代码注入XSS
⚡ 30 秒速记
XSS是把恶意脚本注入到页面并在其他用户的浏览器里执行,核心危害是窃取cookie/token、冒充用户操作- 三类:存储型(存进数据库,影响所有访问者,危害最大)、反射型(在
URL参数里,需诱导点击)、DOM 型(纯前端,服务端日志里查不到) - 根本防线是输出编码而不是输入过滤 —— 同一份数据在
HTML/属性/JS/URL里的转义规则完全不同 - 富文本必须服务端白名单净化(
DOMPurify这类),前端过滤只是体验层 —— 攻击者可以直接调接口绕过 - 纵深防御:
HttpOnlycookie(脚本偷不走)、CSP(禁内联和外链脚本)、框架默认转义(JSX/模板)
XSS 是攻击者把恶意代码注入网页,使它在其他用户浏览器中执行的一类代码注入漏洞。 常见形式可以归为反射型、存储型和 DOM-based:反射型通常随请求内容返回,存储型会被页面持久展示,DOM-based 则发生在前端对数据的处理过程中。它通常会夹带恶意 HTML 或客户端脚本,因此凡是展示外部输入的页面,都不能直接把内容当成可信代码执行。
跨网站指令码(英语:
Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了HTML以及使用者端脚本语言
XSS分为三种:反射型,存储型和DOM-based
# 1.1 如何攻击
⚡ 30 秒速记
- 反射型:恶意参数随请求进入响应,受害者点击特制链接后当场执行
- 存储型:载荷写入评论、工单或昵称,之后访问该页面的用户都会中招
DOM XSS:服务端响应可能完全正常,前端把location、postMessage等数据送进危险sink- 常见
sink包括innerHTML、outerHTML、document.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攻击