不是很清楚防御csrf攻击的流程
尤其是token是怎么生成的?为什么前后端会对应的上?是不是还要一个请求让后端把每次不同的token给前端?
随机生成。
啥叫“前后端对应上”?
利用 Token 来防御 CSRF 的往往是前后端不分离的站点,服务端渲染的时候就已经带着 Token 了,返回给浏览器即可。浏览器提交表单时原样传回这个 Token,服务端比对一下是不是之前下发过的就行。
但如果是前后端分离的,没必要这么做啊,多个接口返回的话反倒增加了 XSS 的风险啊。要么直接 Samesite Cookie 了,要么比对 Origin/Referrer 就行了啊。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
CSRF token
的生成,下发,上送,校验1. 生成
session
或者其他服务端缓存(如Redis);token
的缓存最好有过期时间;token
的安全性可以对生成的token
进行对称加密
。2. 下发
下发是服务端如何把生成的
CSRF token
传给客户端,方式很多了,看客户端怎么方便提取并传给后端。Set-Cookie
下发;3. 上送
上送:是客户端调用接口时提取
CSRF token
并传给服务。看请求接口类型也后很多上送方式。GET
请求可以放入queryString里;Form POST
请求可以添加隐藏域;AJAX
,fetch
请求还可以采用放入request header里;4. 校验
token
;Seesion
获取缓存的值对比。摘自gitHub笔记