【问题标题】:PUT/POST request throttle Rack attack redirect not workingPUT/POST 请求限制 机架攻击重定向不起作用
【发布时间】:2020-04-05 09:18:57
【问题描述】:

所以我有一个表单,它使 XHR 到外部 api 以获取令牌,然后提交到 url,该 url 在我们后端的“/update”处调用我们的数据库。我们正在尝试通过使用机架攻击节流阀来限制一个人可以使用该表单提出的请求数量。因此,例如在两次尝试后达到限制时,第三次应该给出 429 错误,然后重定向到我们的页面/429。到目前为止我有这个:

throttle '/update', {
    limit: 2,
    period: 60
  } do |req|
    next nil unless req.path == '/update' && req.put?

    req.ip
  end

那么对于我们正在做的油门响应:

Rack::Attack.throttled_response = lambda do |env|
headers = {
        'Location' => '/429'
      }
      [302, headers]
  end

代码确实有效并返回 429,但即使我们在标头中有 Location,重定向也不会发生。此外,我们还有一个端点,我们在其中执行GET,并且相同的响应将用户成功重定向到/429

那么如何在使用 Rack Attack ruby​​ on rails 库发出putpost 请求时重定向用户?还有另一种重定向用户的方法吗?任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby rackattack


    【解决方案1】:

    问题在于 HTTP 响应状态代码。如果您希望浏览器重定向,您需要使用 3XX 状态之一。

    # frozen_string_literal: true
    
    module Rack
      class Attack
        throttle('test', limit: 1, period: 60.seconds) do |req|
          true
        end
      end
    
      # response
      Rack::Attack.throttled_response = lambda do |env|
        headers = {
            'Location' => '/test_redirect'
        }
        [301, headers, []]
      end
    end
    

    【讨论】:

    • 我在尝试时实际上有 302,但它仍然不起作用。我也试过 301 但不行。
    • 我用完整的模块代码(基本的东西)更新了答案中的代码。它适用于我的应用程序。试一试
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2014-08-19
    • 1970-01-01
    • 2012-01-20
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多