【问题标题】:JMeter authenticity token with Rails App带有 Rails 应用程序的 JMeter 真实性令牌
【发布时间】:2015-07-14 08:27:00
【问题描述】:

我正在尝试对一个简单的 rails 应用程序执行 JMeter 发布操作,但我得到了以下结果:

在 2015-05-04 12:40:15 -0700 为 127.0.0.1 开始 POST "/flights/" FlightController#create 作为 HTML 处理 参数:{"authenticity_token"=>"$(LOGIN_AUTH_TOKEN)"} 无法验证 CSRF 令牌的真实性 在 3 毫秒内完成 422 个不可处理的实体(ActiveRecord:0.0 毫秒)

我已经实施了有关为真实性登录创建正则表达式提取器的建议,如下所示:

这里是http请求:

任何帮助表示赞赏并提前感谢, 斯拉夫科

【问题讨论】:

  • 为什么这个问题被否决了??

标签: ruby-on-rails jmeter


【解决方案1】:
  • Regular Expression Extractor 移动为第一个HTTP 请求的子元素。
  • 正则表达式可以是name=authenticity_token type=hidden value=(.*?)"
  • 在下一个请求中,使用${LOGIN_AUTH_TOKEN} 访问authentity_token(不是通过$(LOGIN_AUTH_TOKEN))

【讨论】:

  • 在我的情况下它仍然保持不变,以下是控制台参数中的响应:{"authenticity_token"=>"${FORM_AUTH_TOKEN}"}
  • 另外不要忘记将 HttpCookieManager 放入您的 ThreadGroup,因为 Rails save 会根据会话中的令牌检查令牌,该令牌通常在 cookie 中。
  • 不确定 JMETER 是否自己做,但我必须将提取的令牌编码为 ${__urlencode(${FORM_AUTH_TOKEN})}
  • @Jakub 你拯救了我的一天,它终于开始工作了。非常感谢
【解决方案2】:

我认为 Vinoth 是对的,但看起来只检查了请求标头。表单字段在正文中,因此正则表达式处理器应该在那里。

【讨论】:

    【解决方案3】:

    我能够通过检查我呈现的页面的来源并相应地修改我的正则表达式来解决这个问题。

    我搜索了“真实性”的来源,结果如下:

    <meta name="csrf-param" content="authenticity_token" />
    <meta name="csrf-token" content="O4YJPTDTmHqxAtgVYLTyDnuo1gwNoDQFznnqwsUyvdMkJscVXx+YMteKkuMVG44E/H6NYCdi/RzbQ8oIly2euA==" />
    

    我将 jMeter 正则表达式提取器中的正则表达式更改为:meta name="csrf-token" content="(.*?)" /&gt;

    然后我运行我的 jMeter 测试并成功登录到我的开发应用程序。

    我在 Rails 4.2.1 和 Ruby 2.2.1p85 上。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2013-04-21
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多