Apache Jmeter - CSRF令牌与

时间:2017-04-06 09:48:13

标签: apache jmeter token csrf

我已经使用hs登录表单记录了基本的Apache Jmeter场景,该表格使用了csrf令牌。

应用程序记录的示例令牌如下所示:

<input id="csrf_token" name="csrf_token" type="hidden" value="IjU5NzBhMmI3ODNjZGVjMGUwYmI2YTU4ZjRkMTk0MjI0MTg3OTJlNDAi.C8ecSA.PkvdB0aM2M0rfhSLcb_ktyeInfs">

使用Apache Jmeter后处理器(REGEX)我使用以下表达式提取值:

input id="csrf_token" name="csrf_token" type="hidden" value="(.+?)"

结果是成功,并且值已分配给CSRF_VALUE变量。

在下一步中,我将带有登录信息的令牌发送到网站,发布数据如下:

username=username&password=password&csrf_token=IjU5NzBhMmI3ODNjZGVjMGUwYmI2YTU4ZjRkMTk0MjI0MTg3OTJlNDAi.C8ecSA.PkvdB0aM2M0rfhSLcb_ktyeInfs&submit=Zaloguj+si%C4%99

然而,网站返回csrf令牌不匹配的错误。在记录的场景和修改的场景之间唯一改变的是提取并在后续请求中放置csrf令牌。每次重播此方案时,我都会检查结果并显示已收到 csrf令牌 == 已发送csrf令牌。但登录失败并出现相同的错误 - csrf令牌不匹配。

到目前为止,我无法得到错误的,非常简单的情况,但却存在问题。我正在使用apache jmeter 3.1。

1 个答案:

答案 0 :(得分:0)

我建议检查除请求正文部分以外的其他部分,即

  • 您的应用可能希望CSRF令牌位于请求标头中,在这种情况下,您需要添加HTTP Header Manager以发送相关标头
  • 您的应用程序可能期望具有CSRF令牌值的Cookie。在这种情况下,您需要使用HTTP Cookie Manager
  • 来处理它
  • 它可能是HTML编码和解码的问题,即,由于HTML中不允许的转义实体,提取的令牌值可能具有一些额外的字符。在这种情况下,您需要使用JMeter Functions __unescapeHtml()来规范化令牌值

使用浏览器和JMeter的View Results Tree监听器中的开发人员工具仔细检查请求和响应,很可能是上面列出的原因。

以防查看How to Load Test CSRF-Protected Web Sites指南。