未在响应中接收的CSRF Token如何被客户端获取?以Twitter为例
Twitter/X的CSRF Token(x-csrf-token与ct0)机制解析
ct0 Cookie是服务器主动下发的:你觉得没收到是因为可能没留意到初始请求的响应头。当第一次访问Twitter/X页面时,服务器会在响应头的
Set-Cookie字段里设置ct0Cookie,这就是CSRF Token的源头。如果调试时过滤条件太严,或者没查看初始页面加载的主响应,很容易漏掉这个Set-Cookie指令。x-csrf-token请求头是从ct0 Cookie提取的:客户端不会自己生成这个Token,而是由前端JS代码读取已有的
ct0Cookie值,再将其放到x-csrf-token请求头里。当发起需要CSRF验证的API请求时,这套逻辑会自动执行,所以你会看到请求头里突然出现这个Token。容易误以为没收到的常见原因:
- 调试时只关注API请求的响应,没看初始页面加载的主响应(ct0是在这里下发的);
- 浏览器Cookie存储里已有之前会话留下的ct0,这次访问没触发新的Set-Cookie,但Token其实是之前服务器下发的;
- 部分场景下,ct0可能在某个前置静态资源请求的响应头里,容易被忽略。
内容的提问来源于stack exchange,提问作者Gordian
相关产品推荐
相关产品推荐

