【问题标题】:How to Block Requests at the Rack Level?如何在机架级别阻止请求?
【发布时间】:2016-03-11 14:18:11
【问题描述】:

在运行 Rails4 应用程序时,我经常看到机器人在探查我是否在运行 Wordpress 网站。我希望他们希望创建垃圾评论或寻找 Wordpress 安全漏洞。

这是日志中的一个示例错误:

ActionController::RoutingError (No route matches [GET] "/wp-login.php")

什么是 Rack 中间件的简单示例,我可以在其中阻止此 http 请求?我将如何命名该文件以及它在 Rails 应用程序中的位置?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rack middleware rack-middleware


    【解决方案1】:

    您可以使用下面的代码通过 rack-attack gem 阻止所有匹配的“.php”。

    blocklist('block/php') do |req|
        req.ip if /\S+\.php/.match(req.path)
    end
    

    【讨论】:

      【解决方案2】:

      您可以使用rack-attack gem 将某些请求以及来自特定 IP 地址的请求列入黑名单。您还可以使用此 gem 在一定时间内限制请求。

      按照github documentation 中的自述文件在您的 Rails 项目中安装和设置 gem。

      要将某些请求列入黑名单,您可以在 app/config/initializers/rack_attack.rb 文件中执行以下操作:

      # Block logins from a bad user agent
      Rack::Attack.blacklist('block bad UA logins') do |req|
        req.path == '/wp-login.php' && req.get? && req.user_agent == 'BadUA'
      end
      

      【讨论】:

      • blacklist 在当前版本的rack-attack 中已被弃用。这个答案现在应该推荐使用blocklist 方法。
      • 阻止他们比为他们提供 404 服务更快吗?
      猜你喜欢
      • 2017-12-27
      • 2021-06-11
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多