是否有 rails 或机架 gem 阻止被黑客入侵的 URL 请求?

Is there a rails or rack gem that blocks hacked URL requests?

我的 Rails 应用程序经常收到来自黑客扫描漏洞的虚假流量,点击像 /vb/showthread.php%3C/a 这样的 URL。这些在我们的日志中显示为噪音,我想过滤掉它们或以某种方式处理它们(例如提醒某人注意扫描尝试)。

是否有 Rails 或 Rack gem 已经这样做了,或者其他框架中是否有类似的库做同样的事情?

我不确定这是否真的能回答您的问题,因为我认为自定义过滤器比通用过滤器更好 gem。

我在我的 applicaton_controller 上添加了一个前过滤器来处理奇怪的请求,然后你可以发出警报并做你想做的事。

class ApplicationController < ....
  before_action :filter_hacks #first filter

private
  def filter_hacks
    if request.format.to_s == 'php'
      #do something: email, save report, anything
      head(:ok) and return false
    elsif #add other filters

    end
  end

我相信它可以改进,但您可以完全控制要阻止的内容以及发生时该怎么做。

这是一个很好的中间件用例。您可以存储已知错误路由的列表,并在请求进入您的应用程序之前使用您想要拦截和处理请求的任何逻辑。我会在 Rails guides.

中阅读更多关于如何使用 Rack 中间件的内容

但它可以用类似这样的东西来完成:

class FilterBadRequest
  BAD_PATHS = [
    "/vb/showthread.php%3C/a"
  ]

  def initialize(app)
    @app = app
  end

  def call(env)
    req = Rack::Request.new(env)

    bad_request = BAD_PATHS.find { |bad_path| req.fullpath ~= bad_path }

    if bad_request
      raise ActionController::BadRequest
    else
      @app.call(env)
    end
  end
end

这会引发 ActionController::BadRequest 异常,但您可以重定向或在您的应用程序上下文中执行任何其他有意义的操作。您需要确保在 config 块内的应用程序配置文件中注册中间件,例如调用 config.middleware.use FilterBadRequest

rack-attack 中间件 gem 足够通用,可以根据请求的任何属性阻止请求,并提供其他高级功能来处理恶意流量,例如请求限制、阻止列表和请求记录。