You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JMeter对Laravel网站认证时遭遇419错误求助

解决JMeter测试Laravel多用户登录时的419 CSRF验证错误

核心原因

Laravel返回419错误是CSRF验证失败,意味着请求未提供有效CSRF令牌,或令牌与当前用户Session不匹配。你之前仅提取令牌到请求头的操作,忽略了Session与令牌的绑定关系,这是问题核心。

具体解决方案

1. 配置HTTP Cookie管理器

必须在测试计划最顶层添加HTTP Cookie管理器,且确认勾选「每个线程独立配置」选项(默认已勾选)。Laravel的CSRF验证依赖Session,Cookie管理器会自动为每个模拟用户(线程)保存独立的laravel_session和XSRF-TOKEN Cookie,这是令牌验证的基础。

2. 正确提取并使用XSRF-TOKEN

Laravel将CSRF令牌存储在XSRF-TOKEN Cookie中,请求时需将该Cookie值解码后放入X-XSRF-TOKEN请求头:

  • 在登录页的GET请求(或任何返回Cookie的前置请求)下添加正则表达式提取器,配置如下:
    • 引用名称:xsrf_token
    • 正则表达式:XSRF-TOKEN=(.+?);
    • 模板:$1$
  • 在POST登录请求的HTTP信息头管理器中添加字段:
    • 名称:X-XSRF-TOKEN
    • 值:${__urlDecode(${xsrf_token},)}

    注:__urlDecode函数必须添加,因为Cookie中的令牌是URL编码状态,直接使用会导致验证失败。

3. 匹配实际网站的请求规则

对照浏览器开发者工具(F12),确保JMeter登录请求与真实请求完全一致:

  • 请求方法必须为POST
  • 参数名称(如email/password)要和Laravel登录表单的name属性完全匹配
  • 内容类型设置为application/x-www-form-urlencoded(与真实表单提交一致)
  • 补充必要请求头(如Accept、Referer,部分Laravel配置会校验Referer来源)

4. 临时测试方案(仅用于验证流程,禁止生产环境使用)

若仅需验证负载测试流程,可临时在Laravel的app/Http/Middleware/VerifyCsrfToken.php中将登录路由加入CSRF例外:

protected $except = [
    '/login',
];

警告:生产环境绝对不能使用此方法,会引发CSRF安全风险。

5. 确保线程隔离

多用户测试时,要保证每个线程的Cookie和Session完全独立:

  • 确认HTTP Cookie管理器的「每个线程独立配置」已勾选
  • 禁止使用全局变量传递令牌或Session信息

排查验证步骤

  1. 用JMeter「查看结果树」查看每个请求的Cookie,确认XSRF-TOKEN和laravel_session存在且每个线程值不同
  2. 检查POST登录请求的请求头,确认X-XSRF-TOKEN是解码后的正确令牌
  3. 对比浏览器发送的登录请求,校验JMeter的参数、头信息是否完全一致

内容的提问来源于stack exchange,提问作者MAHAMADOU DEMBELE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:08:39