Каков оптимальный способ блокировки неподдерживаемых / недействительных запросов в Rails? - PullRequest
0 голосов
/ 28 декабря 2018

Пример приложения Rails, работающего на Heroku.Мы получаем определенный шаблон запросов (вроде бы DoS) каждый день, и я бы хотел настроить промежуточное программное обеспечение для обработки этих паролей вместо того, чтобы приложение Rails запускалось, чтобы возвращать Exception: ActionController::UnknownFormat или Exception: ActionController::InvalidAuthenticityToken для каждого из них.Я чувствую, что это не лучший способ справиться с ними.

Я реализовал Rack :: Attack, который выглядит следующим образом:

class Rack::Attack
blocklist('block ip') do |req|
  ['a.b.c.d','w.x.y.z'].include? req.ip
end

blocklist('block corrupt paths') do |req|
    req.path =~ /\w*((\.aspx)|(\.php)|(\.txt)|(\.zip)|(\.tar)|(\.rar)|(\.com)|(\.sql))$/
end

blocklisted_response = lambda do |env|
  # Using 503 because it may make attacker think that they have successfully
  # DOSed the site. Rack::Attack returns 403 for blocklists by default
  [ 503, {}, ['Blocked']]
end end

Несмотря на то, что он блокировал определенный стиль пакетных запросов, которые будут регулярно отображаться в журналах, он все еще не 'Я делаю работу хорошо.В частности, я вижу следующий стиль запросов в пакетном режиме, которые ежедневно поступают в наше приложение:

  • // config / AspCms_Config.asp
  • / home / favicon.ico
  • / 3 / favicon.ico

Каждый запрос и отчет об ошибке является ресурсоемким и дорогостоящим.

Как мне лучше обрабатывать эти запросы?Решение заключается в дальнейшей модификации регулярного выражения?Существуют ли другие стандарты, которые мне нужно прочитать?

Спасибо.

1 Ответ

0 голосов
/ 28 декабря 2018

Рассматривали ли вы, чтобы положить ваше приложение позади что-то вроде CloudFlare?В зависимости от ваших потребностей у них есть бесплатный план: https://www.cloudflare.com/plans/

...