服务器向客户端发送CSRF token的时机是什么?
CSRF Token下发时机及Session ID下发问题解答
1. 客户端首次访问站点是否下发Session ID的说明
这个说法不是完全绝对,但绝大多数带用户身份体系的站点都是这么操作的:
- 只要站点需要识别用户身份、提供个性化内容或者登录态服务,服务器会在客户端第一次发起请求时生成唯一的Session ID,通过
Set-Cookie响应头返回给客户端存储,之后客户端所有同域请求都会自动携带这个Cookie里的Session ID,用于服务器校验用户身份 - 如果站点是纯静态站点,没有登录、用户专属内容这类需求,也可以不需要生成和下发Session ID
2. CSRF Token的下发时机
CSRF Token的核心作用是保证敏感请求只能由用户在正规站点页面上主动发起,所以服务器绝对不会在用户提交POST请求的时候才下发Token,都是在用户访问对应业务页面时就提前下发的,你提到的修改密码场景的完整流程如下:
- 用户登录后访问
http://www.sample.com/change密码修改页面时,服务器在返回页面内容的同时,就会生成和当前用户Session绑定的唯一CSRF Token,常见的植入方式有两种:- 直接写入页面表单的隐藏input字段,代码示例为
<input type="hidden" name="csrf_token" value="随机唯一字符串"> - 放到响应的自定义Cookie中,或者单独通过接口返回给前端存储在本地
- 直接写入页面表单的隐藏input字段,代码示例为
- 用户点击提交按钮发起修改密码的POST请求时,前端会把提前拿到的CSRF Token放到请求参数或者自定义请求头里,和其他业务参数一起传给服务器
- 服务器的校验中间件首先会把请求里携带的CSRF Token,和当前用户Session中存储的Token做比对,比对通过才会把请求交给后续的修改密码业务逻辑处理,比对失败直接拦截请求,返回非法请求错误
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

