跨站脚本攻击(XSS) 是一个漏洞,攻击者将恶意 JavaScript 注入到其他用户查看的网页中——在他们的浏览器中运行,以窃取数据、劫持会话或冒充他们执行操作。这是一个常见、危险的网络漏洞,可以通过适当的输出处理来防止。
XSS 如何工作
When user input is rendered into a page WITHOUT proper escaping, injected SCRIPTS run:
Welcome, <%= userInput %>
跨站脚本攻击(XSS) 是一个漏洞,攻击者将恶意 JavaScript 注入到其他用户查看的网页中——在他们的浏览器中运行,以窃取数据、劫持会话或冒充他们执行操作。这是一个常见、危险的网络漏洞,可以通过适当的输出处理来防止。
When user input is rendered into a page WITHOUT proper escaping, injected SCRIPTS run:
Welcome, <%= userInput %>
注入的脚本在受害者浏览器中运行,就像来自可信网站一样 — 让攻击者能够窃取会话 cookies/tokens、劫持账户、捕获按键或以用户身份执行操作。
STORED → malicious script SAVED on the server (e.g. in a comment) → served to all viewers
REFLECTED → script in a request (e.g. a URL parameter) reflected back in the response
DOM-based → client-side JS unsafely puts untrusted data into the DOM
✓ ESCAPE/ENCODE output → render user data as TEXT, not HTML (the key defense):
→ frameworks (React, Angular, Vue) auto-escape by default → use them properly
→ escape based on context (HTML, attribute, JS, URL)
✓ AVOID dangerous APIs → innerHTML, dangerouslySetInnerHTML, eval with untrusted data
✓ SANITIZE HTML if you must allow it (e.g. DOMPurify for rich text)
✓ Content Security Policy (CSP) → restricts what scripts can run (defense in depth)
✓ HttpOnly cookies → JS can't read them (limits cookie theft via XSS)
理解 XSS 以及如何防止它是必要的,因为这是一个 常见、危险的网络漏洞,允许攻击者在用户浏览器中运行恶意脚本,因此对 Web 开发人员来说是必须了解的安全知识。
理解 它如何工作 — 即在没有适当转义的情况下将用户输入呈现到页面中会让注入的 JavaScript 在其他用户的浏览器中在可信网站的上下文中运行,使攻击者能够窃取会话 cookies 和 tokens、劫持账户并充当用户 — 是识别和防止漏洞所必需的。
XSS 是危险的,因为它会危害用户的会话和数据,并且在显示用户生成内容的网络应用中很常见。
理解 类型(存储型 XSS — 恶意脚本保存在服务器上并提供给所有查看者,最危险的;反射型 XSS — 脚本从请求中反射;基于 DOM 的 XSS — 客户端不安全的 DOM 操作)有助于识别不同的攻击向量。
理解 防止方法 是必要的:转义/编码输出(将用户数据呈现为文本而非 HTML — 关键防御,现代框架如 React 在正确使用时默认自动执行)、避免危险的 API(innerHTML、dangerouslySetInnerHTML、带有不受信任数据的 eval — 常见的 XSS 来源)、清理 HTML(当必须允许富文本内容时,例如 DOMPurify)、内容安全策略(限制脚本执行作为深层防御)以及 HttpOnly cookies(防止 JS 读取它们)。
理解框架会自动转义(因此正确使用它们可以防止大多数 XSS,而绕过它们的转义会重新引入漏洞)在实际应用中很重要。
由于 XSS 是一个常见、危险的漏洞,会危害用户的会话和数据,特别是在显示用户内容的应用中,并且由于理解它如何工作以及如何防止它(输出转义、避免危险的 API、CSP、框架默认值)对 Web 开发人员来说是必要的,理解 XSS 及其防止是必要的、必须了解的安全知识 — 一个需要防御的基础网络漏洞,其中正确的输出处理(转义、使用框架默认值、避免危险的 API)是保护用户免受一类广泛攻击的关键知识。