Skip to content

Instantly share code, notes, and snippets.

@tacionery
Created June 3, 2016 19:18
Show Gist options
  • Save tacionery/efb2c5e5b31f0bc41f334228061d9085 to your computer and use it in GitHub Desktop.
Save tacionery/efb2c5e5b31f0bc41f334228061d9085 to your computer and use it in GitHub Desktop.
rack attack config
class Rack::Attack
# se um IP estiver fazendo uma série de requests, ele provavelmente
# é malicioso. então não vamos deixar ele derrubar nossa CPU
throttle('req/ip', limit: 300, period: 5.minutes) do |req|
req.ip
end
# o caso mais comum talvez seja o de forçar o login com uma série de
# logins e senhas até encontrar algum que bata
throttle('login/ip', limit: 5, period: 20.seconds) do |req|
# troque o /login pelo seu endereço de login
if req.path == '/login' && req.post?
req.ip
end
end
# esse será a resposta no caso desses ataque ocorrerem
def self.throttled_response
lambda do |env|
[ 429, { 'Retry-After' => env['rack.attack.match_data'][:period] }, 'Too many requests. Please try again later.' ]
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment