Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
69 views
in Technique[技术] by (71.8m points)

CSRF的token是怎么生成的?

不是很清楚防御csrf攻击的流程
尤其是token是怎么生成的?为什么前后端会对应的上?是不是还要一个请求让后端把每次不同的token给前端?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

CSRF token的生成,下发,上送,校验

1. 生成

  1. 由服务端生成随机唯一的字符串(GUID, UUID等),并保存到服务端的session或者其他服务端缓存(如Redis);
  • token的缓存最好有过期时间;
  1. 如果希望提高token的安全性可以对生成的token进行对称加密

2. 下发

下发是服务端如何把生成的CSRF token传给客户端,方式很多了,看客户端怎么方便提取并传给后端。

  1. 千万别千万别千万别通过Set-Cookie下发;
  2. 喷到页面里作为约定的全局变量;
  3. 最好和后端一起确定一个标准的下发和上送方式。

3. 上送

上送:是客户端调用接口时提取CSRF token并传给服务。看请求接口类型也后很多上送方式。

  1. 针对GET请求可以放入queryString里;
  2. Form POST请求可以添加隐藏域;
  3. AJAX, fetch请求还可以采用放入request header里;
  4. 最好和后端一起确定一个标准的上送方式。

4. 校验

  1. 服务端从请求里获取客户端上送的token
  2. 解密(如果之前有加密的话);
  3. 再跟从Seesion获取缓存的值对比。

摘自gitHub笔记


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...