KNOWLEDGE ARTICLE
XSS 是什么?
跨站脚本攻击
攻击者让不受信任脚本在其他用户的网页上下文中执行。
核心解释
XSS 往往源于输入处理、输出编码或 DOM 操作不当。CSP 可以限制部分利用路径,但不能替代代码层修复。
XSS 如何让不受信任内容变成页面脚本
XSS(Cross-Site Scripting)发生在应用把不受信任数据放进 HTML、属性、URL、CSS 或 JavaScript 上下文,却没有按对应语境安全处理时。攻击脚本会在受害者浏览器中以目标网站来源执行,从而可能读取页面数据、代表用户操作或篡改界面。
反射型 XSS 把当前请求内容反射进响应,存储型 XSS 把恶意内容保存后影响后续用户,DOM 型 XSS 则由前端脚本在浏览器中把不可信数据送入危险 API。三者入口和持久性不同,但根因都与数据从来源流向可执行汇聚点有关。
攻击数据从输入到执行经过哪些环节
- 来源可能是 URL 参数、表单、富文本、消息、第三方 API、postMessage 或本地存储,不能只检查传统输入框。
- 输出编码必须匹配 HTML 文本、属性、JavaScript 字符串和 URL 等具体上下文,通用替换无法覆盖全部语法边界。
- innerHTML、document.write、eval 和动态脚本 URL 等危险汇聚点会把数据解释为代码,安全 DOM API 与模板自动转义可以减少风险。
- Cookie 的 HttpOnly 可限制脚本直接读取会话,CSP 与 Trusted Types 可压缩利用路径,但都不能替代根因修复。
富文本和前端框架为什么仍需专门处理
富文本业务需要允许部分 HTML,不能简单全部编码,应使用成熟净化器和严格允许列表,并考虑 SVG、MathML、URL 协议与浏览器解析差异。净化后的内容若再次拼接或经过不同解析上下文,仍可能重新产生危险。
现代框架默认转义模板值,但绕过 API、服务端渲染、第三方组件和直接 DOM 操作仍可能引入 XSS。安全评审应跟踪数据流,而不是仅凭使用 React、Vue 或 CSP 就推断不存在问题。
实际应用与信息解读
公开响应只能观察 CSP、Cookie 和页面脚本等防护线索,不能由缺少 CSP 确定存在 XSS。发现具体输入能够稳定进入可执行上下文,才是更强的漏洞证据。
知识页和测评应把“少了一层浏览器防护”与“已确认注入漏洞”分开。信息不足时 XSS 状态应为未知,推测影响也要以会话、页面权限和触发条件为前提。
重点关注
缺少 CSP 只表示少了一层浏览器侧防护,不能据此断言页面一定存在 XSS 漏洞。
常见问题
CSP 可以彻底阻止 XSS 吗?
不能。强 CSP 能显著限制部分利用,但错误策略、允许来源和应用逻辑仍可能被绕过,根因仍需代码修复。
前端框架自动转义后还会有 XSS 吗?
仍可能通过绕过转义的 API、危险 DOM 操作、富文本、第三方组件和服务端模板引入。
HttpOnly Cookie 能防止 XSS 吗?
它可阻止脚本直接读取该 Cookie,但攻击脚本仍可能在页面中代表用户发起操作或读取其他数据。