回放录制脚本时某步出现无效CSRF Token错误,其余步骤正常求助
解决LoadRunner回放脚本时CSRF Token验证失败的问题
看起来你遇到的核心问题是硬编码的CSRF Token在回放阶段失效——毕竟大多数系统的CSRF Token要么是一次性的,要么有时间有效期,录制时的Token到回放时大概率已经过期,而其他步骤刚好在有效期内才没触发报错。下面给你几个针对性的解决方案:
1. 动态关联CSRF Token,替换硬编码值
别再手动写死Token了,从服务器的最新响应中动态提取,确保每次回放都用有效的Token:
步骤1:定位Token的来源
先搞清楚系统是在哪里返回CSRF Token的:
- 可能是页面的
<meta>标签(比如<meta name="_csrf" content="xxx">) - 可能是某个接口的响应头(比如
X-CSRF-TOKEN字段) - 也可能存在于Cookie中(比如
XSRF-TOKEN)
步骤2:用web_reg_save_param提取Token
在获取Token的请求之前添加关联规则,比如如果Token在页面meta标签里:
// 在访问目标页面前,添加Token关联规则 web_reg_save_param("CSRF_TOKEN", "LB=name=\"_csrf\" content=\"", // 左边界,根据实际页面代码调整 "RB=\"", // 右边界 "Search=Body", // 在响应体中查找 LAST); // 访问包含Token的页面 web_url("AcademyManagePage", "URL=http://localhost:8080/ams/your-target-page", LAST);
如果Token在Cookie里:
web_reg_save_param("CSRF_TOKEN", "LB=XSRF-TOKEN=", "RB=;", "Search=Headers", // 在响应头的Cookie中查找 LAST);
步骤3:替换硬编码的Token
把原来的固定Token换成关联变量:
web_add_header("X-CSRF-TOKEN", "{CSRF_TOKEN}"); web_add_header("X-Requested-With", "XMLHttpRequest"); lr_think_time(33); web_custom_request("saveScheduleAcademyMapping", "URL=http://localhost:8080/ams/saveScheduleAcademyMapping", "Method=POST", "Body=your-request-body-content", // 注意:请求体里的动态参数(比如scheduleId)也要做关联! LAST);
2. 检查请求的其他动态参数
别只盯着Token——有时候报错是因为请求体里的其他动态参数(比如scheduleId、academyId)没有关联,导致请求不符合服务器预期,被误判为CSRF攻击。一定要确保所有自动生成的参数都用关联变量替换。
3. 确保会话一致性
CSRF Token通常和用户会话绑定,如果回放时会话Cookie丢失或重置,Token验证也会失败。检查脚本中是否保留了完整的Cookie链,必要时可以用web_add_cookie手动维护会话,或者开启LoadRunner的"自动处理Cookie"功能。
4. 验证Token的刷新机制
有些系统会在每次请求后刷新CSRF Token,这意味着你需要在每个需要Token的请求前都重新提取一次Token,而不是只提取一次复用全程。
按照这个思路调整脚本,应该就能解决这个报错问题了。
内容的提问来源于stack exchange,提问作者Prateek Naik
相关产品推荐
相关产品推荐

