Как заблокировать запросы на уровне стойки?

Когда я запускаю приложение на Rails4, я часто вижу, как боты проверяют, работаю ли я на сайте Wordpress. Я ожидаю, что они ищут либо спам в комментариях, либо ищут уязвимости безопасности Wordpress.

Вот пример ошибки из журнала:

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

Что является простым примером промежуточного программного обеспечения Rack, где я мог заблокировать этот http-запрос? Как бы я назвал файл и куда бы он пошел в приложении Rails?

Спасибо!

1 ответ

Решение

Вы можете использовать гем стойки-атаки, чтобы занести в черный список определенные запросы, а также запросы с определенных IP-адресов. Вы также можете регулировать запросы на определенное количество времени, используя этот драгоценный камень.

Следуйте инструкциям из документации по github, чтобы установить и настроить гем в своем проекте Rails.

Чтобы внести в черный список определенные запросы, вы можете сделать что-то подобное в 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

Вы можете использовать этот код ниже, чтобы заблокировать все совпадения ".php" с помощью гема стойки-атаки.

blocklist('block/php') do |req|
    req.ip if /\S+\.php/.match(req.path)
end
Другие вопросы по тегам