[JMeter] 获取CSRF令牌和POST请求
你好!我是系统开发部的福井!
这次,在使用JMeter创建场景时,从受CSRF保护的页面发出POST请求时多次收到403错误,所以我想介绍一个解决方案!
在这篇文章中,
我们将主要介绍两点: - 获取CSRF token
,以及使用获取的token进行POST请求
*顺便说一句,我在博客末尾列出了您应该记住的 JMeter 设置,这也可以作为个人备忘录。如果您从现在开始要使用 JMeter,我们希望您能读完本文。
获取CSRF令牌
我们首先解释一下如何获取 CSRF 令牌。
使用“正则表达式提取”获取CSRF token
■ 新增“正则表达式提取”功能
通过为发出 CSRF 令牌的屏幕上显示的 HTTP 请求的采样器
“添加”→“后处理”→“正则表达式提取” *例如,如果有一个进行登录处理的POST请求,并且请求参数中需要CSRF token,则会提前在“显示登录屏幕”的GET请求中添加正则表达式提取。
■ “正则表达式提取”设置
这次,作为示例,我配置的设置如下。我们将解释需要配置的项目。
①检查字段
选择您要提取的价值目标。这次,选择
“正文” *使用页面的GET请求的响应体来提取CSRF令牌。
② 参考名称
输入将包含提取值的变量(在本例中为 CSRF 令牌) 稍后我们将在发送 POST 时将其用作 CSRF 参数的值。请输入任意字符串。
③ 正则表达式
输入包含 CSRF 令牌的输入标记通过使用正则表达式写入 value 属性的值来获取 CSRF 令牌的值
*上图中的输入内容为示例。请修改它以匹配屏幕上显示的响应中实际可以获得的输入标记的格式。如果输入标签的格式不同,您将无法获取CSRF令牌值(是否存在id属性、name属性中的拼写错误等)。这是一个特别容易被绊倒的地方,所以如果可能的话,我们建议您实际使用开发者工具复制 HTML 中的 input 标签并修改 value 属性的值。
④ 模板
指定是否使用“~th”提取的值。输入“$1$”以使用获取的第一个值
正则表达式提取的设置如下。
使用获取到的token进行POST请求
接下来,我们将向您展示如何将获取的CSRF token包含在请求参数中并发送POST。
下面是请求参数设置的示例。
“${正则表达式提取的引用名称}”格式的参数,即可将获取到的CSRF token发送到目标POST请求采样器中
剩下的就是根据情况设置请求头和其他必要的参数来完成。
奖励(要记住的 JMeter 设置)
正如我在开头介绍的,我想介绍两个您应该记住的 JMeter 设置。
■ 基本身份验证
进行负载测试时,如果需要基本身份验证,可以使用“HTTP 身份验证管理器”登录。
HTTP 身份验证管理器可以添加为需要基本身份验证的“线程组”、“简单控制器”或“初始 HTTP 请求采样器”。
您可以通过选择
“添加”→“配置元素”→“HTTP 身份验证管理器”添加 HTTP 身份验证管理器后,将显示上述屏幕,输入“基本 URL”、“用户名”和“密码”以完成设置。
■ HTTP cookie 管理器
接下来,对于场景中需要保留cookie的情况,可以通过配置“HTTP cookie管理器”来使用cookie信息。
HTTP cookie 管理器还可以添加到任何“线程组”、“简单控制器”或“采样器”中,并且可以通过选择
“添加”→“配置元素”→“HTTP Cookie 管理器”添加后,将显示上述屏幕,但可以按原样使用 HTTP cookie 管理器,除非有您想用于测试的值。
*“您想在每次循环时丢弃cookie吗?”项目通过选中此项,您可以在每次循环时丢弃cookie。
*添加HTTP cookie管理器后,运行场景并确认请求体中发送了Cookie数据,则设置完成。
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
这次就这样了!
感谢您阅读到最后!