CSRF

3/12/2022 计算机网络

# 1. CSRF原理

查看答案

CSRF是跨站请求伪造,用户在a网站已经有登录状态,攻击者诱导用户进入b网站,点击b网站向a网站发送跨域请求,冒用受害者执行操作。

# 2. CSRF的分类

查看答案
  • GET类型:一个简单的img请求就可以
  • POST类型:一个自动提交的表单,模拟POST请求
  • 链接类型:a链接里面,用户手动点击

# 3. CSRF的特点

查看答案
  1. 通常攻击者的目的是为了冒用用户做操作,而不是窃取用户信息
  2. 一般攻击是从第三方网站发起的,所以通常是跨域的

# 4. CSRF 与 XSS 区别

查看答案
  • 通常来说 CSRF 是由 XSS 实现的,CSRF 时常也被称为 XSRF
  • 本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题。

# 5. 如何预防CSRF

查看答案

# (一)阻止不明外域的访问

  • 同源检测

同源检测:在请求头中加入Origin Header,Referer Header,如果都不存在就直接禁止访问 同源验证是一个相对简单的防范方法,能够防范绝大多数的CSRF攻击。但这并不是万无一失的,对于安全性要求较高,或者有较多用户输入内容的网站,我们就要对关键的接口做额外的防护措施。

  • Samesite Cookie 跨域情况下,相关的cookie无法在请求的时候携带

# (二)提交时要求附加本域才能获取的信息

  • JWT(Json Web Token)
  1. 服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,Token最好还是存在服务器的Session中
  2. 页面提交的时候手动添加Token
  3. 服务器收到Token会进行解密验证起有效性
  • 双cookie

双重Cookie采用以下流程:

  1. 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串
  2. 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中
  3. 后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。
查看答案
  1. 通过 csrf 在同个浏览器下面通过浏览器会自动带上 cookie 的但是 token 不会被浏览器带上
  2. token 是放在 jwt 里面下发给客户端的,而且不一定存储在哪里,不能通过 document.cookie 直接拿到,通过 jwt+ip 的方式可以防止被劫持,即使被劫持也是无效的 jwt。

# 7. 介绍下如何实现 token 加密

查看答案
  1. 需要一个secret(随机数)
  2. 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端
  3. 前端每次request在header中带上token
  4. 后端用同样的算法解密
更新时间: 2022-03-31 02:04