diff --git a/Gemfile b/Gemfile index 198630a46..3c652d656 100644 --- a/Gemfile +++ b/Gemfile @@ -140,3 +140,5 @@ gem "rqrcode", "~> 2.2" gem "puppeteer-ruby", "~> 0.45.6" + +gem "rack-attack", "~> 6.8" diff --git a/Gemfile.lock b/Gemfile.lock index d8b404ba1..92495ff27 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -330,6 +330,8 @@ GEM rack (2.2.3.1) rack-accept (0.4.5) rack (>= 0.4) + rack-attack (6.8.0) + rack (>= 1.0, < 4) rack-cors (1.1.1) rack (>= 2.0.0) rack-mini-profiler (3.0.0) @@ -570,6 +572,7 @@ DEPENDENCIES pry puma (~> 5.6) puppeteer-ruby (~> 0.45.6) + rack-attack (~> 6.8) rack-cors rack-mini-profiler (~> 3.0) rails (~> 6.1.5) diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb new file mode 100644 index 000000000..7b527678a --- /dev/null +++ b/config/initializers/rack_attack.rb @@ -0,0 +1,5 @@ +Rack::Attack.throttle("requests by ip", limit: 20, period: 2) do |request| + request.ip +end + +Rack::Attack.cache.store = ActiveSupport::Cache::RedisCacheStore.new(url: ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" })