如何在机架级别阻止请求?

时间:2015-12-07 03:06:55

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

当运行Rails4应用程序时,我经常看到机器人正在探究我是否正在运行Wordpress网站。我希望他们想要制作评论垃圾邮件或寻找Wordpress安全漏洞。

以下是日志中的示例错误:

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

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

谢谢!

2 个答案:

答案 0 :(得分:8)

您可以使用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

答案 1 :(得分:0)

您可以在下面的代码中使用机架式攻击gem阻止所有匹配的“ .php”。

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