基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

CSRF 攻击与 XSS 攻击的本质区别是什么?

知识点图片

CSRF(跨站请求伪造)与 XSS(跨站脚本攻击)是 Web 安全中最常见的两种攻击方式。它们的本质区别可以用一句话概括:

XSS 是利用用户对网站的信任(执行了恶意脚本),而 CSRF 是利用网站对用户的信任(利用了用户的登录状态)。

以下从四个维度详细解析它们的本质区别:

1. 信任关系的“方向”不同(核心区别)

  • XSS (Cross-Site Scripting):
    • 核心: 破坏了 “用户 -> 网站” 的信任。
    • 解释: 用户访问了受信任的网站,浏览器认为该网站返回的代码(HTML/JS)是安全的并加以执行,但实际上这些代码里混入了攻击者注入的恶意脚本。
  • CSRF (Cross-Site Request Forgery):
    • 核心: 破坏了 “网站 -> 用户” 的信任。
    • 解释: 网站认为只要请求中携带了正确的 Cookie/Session,就是用户本人的意愿。攻击者正是利用这一点,诱导用户的浏览器在后台默默发送请求,网站无法区分这是用户自发的还是被诱导的。

2. 攻击原理不同

  • XSS(代码注入):
    • 攻击者需要在受害者浏览的页面中注入并执行恶意 JavaScript 代码
    • 一旦脚本执行,攻击者就可以窃取 Cookie、监听键盘、修改页面内容、甚至完全控制受害者的浏览器行为。
    • 关键点: 必须有脚本在受害者浏览器中运行。
  • CSRF(借刀杀人):
    • 攻击者不需要在受害者的页面中执行代码,也不需要窃取 Cookie。
    • 攻击者诱导受害者访问第三方恶意网站(或点击链接),利用浏览器自动携带 Cookie 的机制,向目标网站发送跨域请求(如转账、改密)。
    • 关键点: 借用用户的“身份凭证”(Cookie),伪造操作请求。

3. 攻击后果与能力范围不同

  • XSS:
    • 能力更强: 可以窃取数据(读取 Cookie、LocalStorage)、读取页面内容、截图、获取用户输入。
    • 双向交互: XSS 脚本不仅能发送请求,还能读取服务器返回的响应数据。
  • CSRF:
    • 能力受限: 只能执行“状态改变”的操作(如提交表单、购买商品)。
    • 单向攻击: 由于浏览器“同源策略”的限制,CSRF 攻击者通常只能发送请求,无法读取响应结果(即攻击者知道请求发出去了,但不知道服务器具体回复了什么内容)。

4. 防御策略的侧重点不同

  • XSS 防御(侧重于输入输出控制):
    • 转义/编码: 对用户输入的数据进行 HTML Entity 编码。
    • CSP (内容安全策略): 限制浏览器只加载受信任域名的脚本。
    • HttpOnly Cookie: 禁止 JavaScript 读取 Cookie(防止 Session 劫持)。
  • CSRF 防御(侧重于请求来源验证):
    • CSRF Token: 在请求中加入随机 Token,攻击者无法伪造这个 Token。
    • SameSite Cookie: 设置 Cookie 的 SameSite 属性(Strict 或 Lax),禁止跨域发送 Cookie。
    • Referer/Origin 校验: 检查请求头中的来源地址。

通俗类比

为了方便记忆,可以这样理解:

  • XSS 像是一个“小偷”混进了你家:
    你(浏览器)以为他是装修工人(正常代码),让他进屋干活。结果他进屋后把你保险柜里的钱(Cookie/数据)偷走了,或者把你的家具换了(篡改页面)。

  • CSRF 像是一个“骗子”冒充你的名义:
    骗子(攻击者)不知道你家保险柜密码,但他知道你经常去某家高档餐厅(目标网站)且那是记账消费(Cookie)。于是骗子伪造了一张你的签名条(伪造请求),让餐厅给你送一份昂贵的外卖。餐厅看到签名条(Cookie)以为是你点的,就扣了你的钱。骗子没进你家门,但他让你破费了。

总结

特性 XSS (跨站脚本) CSRF (跨站请求伪造)
本质 恶意代码注入与执行 借用用户身份伪造请求
信任关系 用户信任了带有恶意脚本的网站 网站信任了带有用户 Cookie 的浏览器
获取数据 可以窃取 Cookie 和页面数据 不可以读取响应数据,只能执行操作
防御核心 转义输出、CSP、HttpOnly CSRF Token、SameSite Cookie
00:00
00:00