rack-attack 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rack-attack might be problematic. Click here for more details.

data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Rack::Attack!!!
2
- A DSL for blocking & thottling abusive clients
2
+ *A DSL for blocking & thottling abusive clients*
3
3
 
4
4
  Rack::Attack is a rack middleware to protect your web app from bad clients.
5
5
  It allows *whitelisting*, *blacklisting*, and *thottling* based on arbitrary properties of the request.
@@ -8,9 +8,10 @@ Thottle state is stored in a configurable cache (e.g. `Rails.cache`), presumably
8
8
 
9
9
  ## Installation
10
10
 
11
- Add the [rack-attack](http://rubygems.org/gems/rack-attack) gem to your Gemfile or run
11
+ Install the [rack-attack](http://rubygems.org/gems/rack-attack) gem; or add it to you Gemfile with bundler:
12
12
 
13
- gem install rack-attack
13
+ # In your Gemfile
14
+ gem 'rack-attack'
14
15
 
15
16
  Tell your app to use the Rack::Attack middleware.
16
17
  For Rails 3 apps:
@@ -18,22 +19,23 @@ For Rails 3 apps:
18
19
  # In config/application.rb
19
20
  config.middleware.use Rack::Attack
20
21
 
21
- Or in your `config.ru`:
22
+ Or for Rackup files:
22
23
 
24
+ # In config.ru
23
25
  use Rack::Attack
24
26
 
25
27
  Optionally configure the cache store for throttling:
26
28
 
27
- Rack::Attack.cache.store = my_cache_store # defaults to Rails.cache
29
+ Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new # defaults to Rails.cache
28
30
 
29
- Note that `Rack::Attack.cache` is only used for throttling, not blacklisting & whitelisting.
31
+ Note that `Rack::Attack.cache` is only used for throttling, not blacklisting & whitelisting. Your cache store must implement `increment` and `write` like [ActiveSupport::Cache::Store](http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html).
30
32
 
31
33
  ## How it works
32
34
 
33
- The Rack::Attack middleware examines each request against *whitelists*, *blacklists*, and *throttles* that you define. There are none by default.
35
+ The Rack::Attack middleware compares each request against *whitelists*, *blacklists*, and *throttles* that you define. There are none by default.
34
36
 
35
- * If the request matches any whitelist, the request is allowed. Blacklists and throttles are not checked.
36
- * If the request matches any blacklist, the request is blocked. Throttles are not checked.
37
+ * If the request matches any whitelist, it is allowed. Blacklists and throttles are not checked.
38
+ * If the request matches any blacklist, it is blocked. Throttles are not checked.
37
39
  * If the request matches any throttle, a counter is incremented in the Rack::Attack.cache. If the throttle limit is exceeded, the request is blocked and further throttles are not checked.
38
40
 
39
41
  ## Usage
@@ -83,17 +85,18 @@ Customize the response of throttled requests using an object that adheres to the
83
85
 
84
86
  Rack:Attack.throttled_response = lambda do |env|
85
87
  # name and other data about the matched throttle
86
- env['rack.attack.matched']
87
- env['rack.attack.match_type']
88
- env['rack.attack.match_data']
88
+ body = [
89
+ env['rack.attack.matched'],
90
+ env['rack.attack.match_type'],
91
+ env['rack.attack.match_data']
92
+ ].inspect
89
93
 
90
- [ 503, {}, ['Throttled']]
94
+ [ 503, {}, [body]]
91
95
  end
92
96
 
93
97
  Similarly for blacklisted responses:
94
98
 
95
99
  Rack:Attack.blacklisted_response = lambda do |env|
96
- env['rack.attack.blacklisted'] # name of the matched blacklist
97
100
  [ 503, {}, ['Blocked']]
98
101
  end
99
102
 
@@ -119,10 +122,6 @@ less on short-term, one-off hacks to block a particular attack.
119
122
 
120
123
  Rack::Attack complements `iptables` and nginx's [limit_zone module](http://wiki.nginx.org/HttpLimitZoneModule).
121
124
 
122
- ## Thanks
123
-
124
- Thanks to [Kickstarter](https://github.com/kickstarter) for sponsoring Rack::Attack development
125
-
126
125
  [![Travis CI](https://secure.travis-ci.org/ktheory/rack-attack.png)](http://travis-ci.org/ktheory/rack-attack)
127
126
 
128
127
  ## License
@@ -7,7 +7,7 @@ module Rack::Attack
7
7
 
8
8
  class << self
9
9
 
10
- attr_accessor :cache, :notifier, :blacklisted_response, :throttled_response
10
+ attr_accessor :notifier, :blacklisted_response, :throttled_response
11
11
 
12
12
  def whitelist(name, &block)
13
13
  self.whitelists[name] = Whitelist.new(name, block)
@@ -29,7 +29,6 @@ module Rack::Attack
29
29
  @app = app
30
30
 
31
31
  # Set defaults
32
- @cache ||= Cache.new
33
32
  @notifier ||= ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
34
33
  @blacklisted_response ||= lambda {|env| [503, {}, ['Blocked']] }
35
34
  @throttled_response ||= lambda {|env|
@@ -78,6 +77,10 @@ module Rack::Attack
78
77
  notifier.instrument('rack.attack', req) if notifier
79
78
  end
80
79
 
80
+ def cache
81
+ @cache ||= Cache.new
82
+ end
83
+
81
84
  def clear!
82
85
  @whitelists, @blacklists, @throttles = {}, {}, {}
83
86
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Attack
3
- VERSION = '1.1.0'
3
+ VERSION = '1.2.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-attack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: