XSS的身世

物理
XSS的身世

用户头像
战争机器 更新于2026-8-23 13:45:46

盲猜有人看成XXS了

跨站脚本攻击

1 核心定义

XSS 是一种代码注入攻击,攻击者将恶意脚本(通常为 JavaScript)注入到可信网站中,当用户浏览器解析该网站时,脚本随页面一同执行

2 根本成因

  • 用户输入未经过滤或转义直接输出到 HTML 页面
  • 浏览器信任来自同源(Same-Origin)的脚本,无法区分合法与恶意代码
  • Web 应用将用户数据视为可执行代码而非纯文本

3 三种主要类型

3.1 反射型 XSS(Non-Persistent)

  • 恶意脚本通过 URL 参数、表单提交等即时请求传递
  • 服务器将脚本原样反射回响应页面,仅影响点击链接的当前用户
  • 典型场景:搜索框错误提示、URL 重定向参数
  • 攻击链路:构造恶意链接 → 诱导用户点击 → 浏览器执行反射脚本 → 窃取 Cookie 或重定向

3.2 存储型 XSS(Persistent)

  • 恶意脚本永久存储在服务器数据库、文件或缓存中
  • 每次访问受感染页面时,脚本自动从服务器加载并执行
  • 典型场景:论坛帖子、评论区、用户资料、商品评价
  • 攻击链路:提交恶意内容 → 服务器存储 → 其他用户访问页面 → 脚本在受害者浏览器执行 → 蠕虫式传播

3.3 DOM 型 XSS(基于文档对象模型)

  • 完全不经过服务器后端,恶意脚本在前端 DOM 操作中产生
  • 利用 document.writeinnerHTMLevallocation.hashdocument.cookie 等客户端 API
  • 典型场景:单页应用(SPA)的路由参数、前端模板渲染、客户端缓存读取
  • 攻击链路:恶意 URL 片段 → JavaScript 读取并修改 DOM → 脚本执行 → 劫持用户会话

4 攻击危害(按严重程度排序)

  • 会话劫持:窃取 Cookie、Session ID,伪装成受害者发起请求
  • 键盘记录:通过 onkeydown 事件捕获所有按键,获取密码与敏感信息
  • 钓鱼攻击:篡改页面内容,伪造登录框或支付表单,收集用户凭证
  • 内网探测:利用 JavaScript 发起内网请求,扫描端口或获取内部服务信息
  • 强制下载:通过 iframewindow.open 诱导下载恶意文件
  • 蠕虫传播:利用用户身份发送恶意私信或帖子,实现自动扩散
  • 浏览器历史与剪贴板读取:获取用户浏览记录或复制内容

5 防御体系(纵深防御原则)

5.1 输入验证(过滤)

  • 白名单优先:只允许预期格式的字符(如数字、字母、特定符号)
  • 黑名单辅助:过滤 <script>javascript:onerror=onload= 等危险模式
  • 上下文感知:验证内容是否匹配 URL、邮箱、日期、数字等具体类型
  • 长度限制:防止超长 payload 绕过过滤逻辑

5.2 输出编码(转义)—— 最核心防御

  • HTML 实体编码<&lt;>&gt;&&amp;"&quot;'&#x27;
  • HTML 属性编码:对属性值内的特殊字符(空格、引号、尖括号)进行编码
  • JavaScript 编码:对字符串中的 \"'\n\r 等进行 Unicode 转义(如 \u003c
  • CSS 编码:对 URL 或动态样式值中的 ();\ 转义
  • URL 编码:对查询参数整体使用 encodeURIComponent
  • 注意编码顺序:先按目标上下文(HTML/JS/CSS/URL)选择对应编码器,再输出

5.3 使用安全 API 替代危险操作

  • 禁止innerHTMLouterHTMLdocument.writeevalsetTimeout(string)setInterval(string)
  • 推荐textContentinnerTextcreateElement + appendChildsetAttribute
  • 使用 DOMPurify 等库对 HTML 进行净化(Sanitize),保留安全标签并移除事件处理器

5.4 HTTP 安全头

  • CSP(内容安全策略):通过 Content-Security-Policy 头限制脚本来源(script-src 'self'),禁止内联脚本(unsafe-inline)和 evalunsafe-eval
  • X-XSS-Protection:启用浏览器内置反射型 XSS 过滤器(X-XSS-Protection: 1; mode=block),但该头已逐渐废弃,CSP 为主
  • HttpOnly:标记 Cookie 为 HttpOnly,禁止 JavaScript 读取(防御会话劫持)
  • Secure:Cookie 仅在 HTTPS 下传输
  • SameSite:限制 Cookie 的跨站发送(Lax 或 Strict)

5.5 框架内置防护

  • React:默认 JSX 中变量为文本,使用 dangerouslySetInnerHTML 时必须配合 DOMPurify
  • Vue:使用 {{ }} 插值自动转义,v-html 需谨慎
  • Angular:默认模板对变量进行编码,使用 bypassSecurityTrust 必须显式声明
  • 所有框架均提供自动转义,但开发者绕过时需额外检查

5.6 其他辅助措施

  • 使用随机 CSRF Token 防止恶意脚本利用用户身份发起请求
  • 设置 X-Content-Type-Options: nosniff 防止 MIME 类型嗅探
  • 对上传文件进行重命名并存储于独立域名(避免同源执行)
  • 定期使用自动化扫描工具(如 OWASP ZAP、Burp Suite)检测 XSS

QQ浏览器截图20260823214457.png

QQ浏览器截图20260823214429.png

QQ浏览器截图20260823214404.png

14.后记

1.本帖只为计算机科普,无任何不良引导

2.仅供学习使用,不得运用至真实的网络攻击

3.若因此受到警告,405(禁止访问),拉黑,甚至牵制到行政,刑事责任,质心论坛,本帖与我概不负责

收起
8
6
共1条回复
时间正序
用户头像
_Tsukuyomi
3小时前
之前把自己网站当靶场练过几次(),发现如果用XSS脚本注册一个Service Worker就能读到HTTP Only的JWTCookies了,且某些手机浏览器在清除记录时不会杀Service Worker,没有内置控制台页也不能主动杀,在排行榜里用IMG包裹注册SW以及自调用复制的脚本1h内盗了50多个号(小网站