- Published on
网络安全
- Authors
- Name
- Reeswell
Web 安全
XSS 和 CSRF 攻击
XSS(跨站脚本攻击)
定义:攻击者向网页中注入恶意脚本(通常为 JavaScript),当其他用户访问该页面时,脚本会在用户浏览器中执行,从而窃取用户信息、劫持会话或执行其他恶意操作。
本质:注入并执行脚本,攻击目标是用户浏览器。
举例:攻击者在评论区插入 <script>alert('XSS')</script>
,其他用户访问页面时弹窗或窃取 Cookie。
防御措施:
- 输入过滤
- 输出编码(如 HTML 转义)
- 使用 CSP(内容安全策略)
- 设置 HTTP Only Cookie
XSS 攻击类型详解
反射型 XSS:
- 恶意脚本通过 URL 参数传递给服务器,服务器未做处理直接返回给浏览器执行
- 示例:
http://example.com/?search=<script>alert(1)</script>
存储型 XSS:
- 攻击者的脚本被存储在服务器上(如数据库、评论、用户资料等),当其他用户访问该页面时,脚本从服务器加载并执行
- 常见于论坛、博客、社交网站等允许用户提交内容的场景
DOM 型 XSS:
- 不依赖服务器响应,而是由于前端 JavaScript 操作 DOM 不当导致
- 例如:
document.write(location.hash)
,如果攻击者构造#<script>alert(1)</script>
,则可能触发
XSS 防护核心机制
1. 输入验证与过滤
- 对所有用户输入进行严格校验,不允许 HTML 标签、特殊字符直接插入
- 使用白名单机制,仅允许特定标签(如
<b>
、<i>
)和属性 - 工具库如 OWASP 的 Java Encoder、PHP 的
htmlspecialchars
、Node.js 的 DOMPurify 可用于清理输入
2. 输出上下文感知的编码
- 根据输出位置(HTML、JS、CSS、URL)对数据进行相应编码,防止脚本执行
- HTML 实体编码:
<
→<
- JavaScript 编码:
"
→\x22
- URL 编码:空格 →
%20
3. 内容安全策略(Content Security Policy, CSP)
- 通过 HTTP 头
Content-Security-Policy
限制网页中只能加载指定来源的脚本、样式、图片等资源 - 可以禁止内联脚本(inline script)和
eval()
,极大降低 XSS 风险 - 示例 CSP 头:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com;
4. HttpOnly Cookie
- 设置 Cookie 的 HttpOnly 标志,防止 JavaScript 访问敏感 Cookie(如 session ID)
- 有效防御因 XSS 导致的会话劫持
XSS 防护能力对比
防御手段 | 防存储型 | 防反射型 | 防 DOM 型 | 错误报告 |
---|---|---|---|---|
输入过滤 | ✓ | ✓ | ✗ | ✗ |
输出编码 | ✓ | ✓ | ✓ | ✗ |
HTTP Only Cookie | ✓ | ✓ | ✓ | ✗ |
CSP | ✓ | ✓ | ✓ | ✓ |
XSS 攻击类型对比
攻击类型 | 存储位置 | 触发方式 | 影响范围 | 危险程度 |
---|---|---|---|---|
存储型 XSS | 服务器数据库 | 用户访问包含恶意脚本的页面 | 持久性,影响所有访问用户 | 高 |
反射型 XSS | URL 参数 | 用户点击包含恶意脚本的链接 | 一次性,影响点击用户 | 中 |
基于 DOM 型 | 前端 DOM | 客户端 JavaScript 处理用户输入 | 本地执行,不经过服务器 | 中 |
CSRF(跨站请求伪造)
定义:攻击者诱导用户在已登录的目标网站上,自动发起非用户本意的请求(如转账、修改密码等),利用用户的身份完成非法操作。
本质:伪造合法请求,攻击目标是服务器端对用户身份的信任。
举例:攻击者构造一个隐藏表单或图片,诱导用户点击链接,自动向银行转账接口发起 POST 请求。
防御措施:
- 使用 Anti-CSRF Token(同步令牌模式)
- 设置 SameSite Cookie 属性
- 验证 Referer 头
知识补充:XSS 底层原理
浏览器无法区分"合法脚本"和"恶意脚本",只要 HTML 文档中包含<script>
或可执行的 JS 代码,浏览器都会执行。因此必须在输入和输出环节严格校验和转义,防止恶意代码注入。
CSRF 防护策略
分级防护建议
安全级别 | 适用场景 | 防御措施 |
---|---|---|
基础 | 博客/新闻站 | SameSite=Lax + 框架默认防护 |
标准 | 电商/社交网络 | 同步令牌 + SameSite=Strict |
高级 | 金融/医疗系统 | 加密令牌 + 关键操作二次认证 |