CSRF 攻击与防护
AI summary
date
Aug 13, 2024
slug
csrf-attack
status
Published
tags
技术
summary
CSRF(跨站请求伪造)利用浏览器自动携带Cookie的特性进行攻击,攻击者通过钓鱼网站向受害者已登录的网站发送请求,伪装成用户操作。防护措施包括限制Referer、携带Token和使用验证码,但各有缺点。
type
Post
Cookie
用户向服务器发送请求时,服务器需要通过一种方式确认该请求发送者的身份。
但由于现在的 Web 应用基于 Http 协议,而该协议是一种无状态协议,每个请求都是独立的,无法通过协议本身确认该请求的身份信息。
因此,需要设计一种机制,用来验证请求发送的身份。目前常见的方式有 JWT Token 或者 Cookie。
Cookie 是保存在浏览器本地的一段数据,比如当用户首次登陆时,服务器返回的响应中有特殊的响应头
Set-Cookie: <cookie-name>=<cookie-value>
浏览器就会自动将其保存在用户本地,在下次请求该域名时自动携带此 Cookie。如此,便能验证发送方的身份。
CSRF 攻击方式
CSRF 是 Cross Site Request Forgery (跨站请求伪造)的缩写。
其攻击原理比较简单,利用了上述浏览器自动携带 Cookie 的特性。
一般的攻击流程如下:
- 受害者登录 a 网站,浏览器存储该网站的 Cookie。
- 用户访问钓鱼网站,攻击者在钓鱼网站中向 a 网站发送请求,浏览器自动携带了之前存储的 cookie
- a 网站验证 cookie 通过,以为是用户本人的操作
- 攻击完成
在整个攻击过程中,攻击者无法读取 cookie,但可以使用 cookie(利用浏览器自动携带的特性)。
攻击案例
(转自)
YouTube的CSRF漏洞
2008年,有安全研究人员发现,YouTube上几乎所有用户可以操作的动作都存在CSRF漏洞。如果攻击者已经将视频添加到用户的“Favorites”,那么他就能将他自己添加到用户的“Friend”或者“Family”列表,以用户的身份发送任意的消息,将视频标记为不宜的,自动通过用户的联系人来共享一个视频。例如,要把视频添加到用户的“Favorites”,攻击者只需在任何站点上嵌入如下所示的IMG标签:
攻击者也许已经利用了该漏洞来提高视频的流行度。例如,将一个视频添加到足够多用户的“Favorites”,YouTube就会把该视频作为“Top Favorites”来显示。除提高一个视频的流行度之外,攻击者还可以导致用户在毫不知情的情况下将一个视频标记为“不宜的”,从而导致YouTube删除该视频。
这些攻击还可能已被用于侵犯用户隐私。YouTube允许用户只让朋友或亲属观看某些视频。这些攻击会导致攻击者将其添加为一个用户的“Friend”或“Family”列表,这样他们就能够访问所有原本只限于好友和亲属表中的用户观看的私人的视频。
攻击者还可以通过用户的所有联系人名单(“Friends”、“Family”等等)来共享一个视频,“共享”就意味着发送一个视频的链接给他们,当然还可以选择附加消息。这条消息中的链接已经并不是真正意义上的视频链接,而是一个具有攻击性的网站链接,用户很有可能会点击这个链接,这便使得该种攻击能够进行病毒式的传播
防护措施
抵御 CSRF 的关键,是在请求中加入攻击者无法伪造的信息
- 限制 Referer: HTTP 请求头有一个 Referer 字段,表示请求的来源。
缺点:依赖浏览器实现,低版本浏览器可修改 Referer
- 携带 Token:登陆时同时返回 Token,前端存储 localStorage 并在发送请求时主动携带
缺点:并不绝对安全
- 验证码 😂
缺点:用户可能会骂娘