如何通过Cookie传递XSRF Token?录制请求XSRF Token仅在响应头,脚本执行时不从数据库获取如何解决
- 服务端生成有效XSRF Token后,通过
Set-Cookie响应头将Token写入客户端Cookie,可根据业务场景配置Cookie属性:同站应用设置SameSite=Lax或SameSite=Strict降低跨站泄露风险,跨站场景需配置SameSite=None+Secure;如果后续前端需要从Cookie读取Token值,不要开启HttpOnly属性;路径配置为/保证全站所有请求都能携带该Cookie。 - 客户端发起POST/PUT/DELETE等修改类请求时,要么手动从Cookie中读取XSRF Token值,填入自定义请求头(常规为
X-XSRF-TOKEN)或者请求体参数中;要么直接使用自带XSRF适配的框架(Axios、Angular等),这类框架会默认自动读取Cookie中名为XSRF-TOKEN的字段,自动注入到请求头中,无需额外开发。 - 服务端收到请求后,校验请求头/请求体中携带的Token值,和Cookie中携带的Token值是否一致,匹配即校验通过。
响应头返回XSRF Token、执行脚本无数据库存储场景的处理方案
该场景属于无状态XSRF校验实现,Token本身通过签名、对称加密生成,服务端校验时直接验签/解密即可,不需要查询数据库,按以下步骤处理即可:
- 脚本录制阶段,先定位返回XSRF Token的初始请求(一般为页面访问请求、登录请求),识别存储XSRF Token的响应头字段名,在脚本中新增响应提取规则,将该响应头的值提取为全局变量,比如命名为
${dynamic_xsrf_token}。 - 绝对不要硬编码录制阶段获取的固定Token,XSRF Token通常和会话绑定且有有效期,硬编码的Token执行时必然校验失败。
- 后续所有需要携带XSRF Token的业务请求,直接把提取到的
${dynamic_xsrf_token}变量填入对应请求头或者请求参数的位置即可,和Cookie中自动携带的Token天然匹配。 - 多用户/多会话压测场景下,每个独立会话单独执行一次Token提取逻辑,不要跨会话复用Token,同时保证同一会话的Cookie全局复用,避免出现Cookie和Token不匹配的问题。
内容的提问来源于stack exchange,提问作者yazhdevi subramani
相关产品推荐
相关产品推荐

