背景
项目程序为了实现CSRF(Cross-Site Request Forgery,跨站请求伪造)保护,需要设置一个秘钥,并利用这个秘钥生成加密令牌,然后在处理请求时利用令牌验证表单数据的真伪。
至于请求-响应端,了解的情况是这样:客户首先访问(GET)比如登录页面,此时页面的登录表单中包含1个隐藏字段,其内容是CSRF令牌,然后客户填写登录信息并提交(POST),Form数据中也需包含令牌内容以便程序校验。
方案
上面我们已经知道了登录业务的逻辑,那么性能测试脚本的登录事务分2步走:
1.GET /auth/login访问登录页面,找到包含在表单中的CSRF令牌–csrf_token,并保存下来。
2.POST /auth/login提交登录表单,表单数据包含csrf_token。
不管是查看浏览器上的网页源代码,还是检查请求后的响应体,我们都能找到需要的CSRF令牌。这里我们选择利用LR中的web_reg_save_param函数去保存响应体中正则匹配的内容。
第一步访问登录页面,因为是提交登录的前置业务,且不计入提交登录业务,故代码编辑在vuser_init,如下:
vuser_init()
{
// 保存用户登录地址
lr_save_string("http://127.0.0.1:5000/auth/login", "user_login");
lr_start_transaction("进入登录页面");
// 保存CSRF令牌
web_reg_save_param("csrf_token",
"LB=name=\"csrf_token\" type=\"hidden\" value=\"",
"RB=\">"