rack-attack 5.2.0 → 5.3.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -24
  3. data/Rakefile +1 -1
  4. data/lib/rack/attack.rb +28 -23
  5. data/lib/rack/attack/allow2ban.rb +1 -0
  6. data/lib/rack/attack/blocklist.rb +0 -1
  7. data/lib/rack/attack/cache.rb +1 -2
  8. data/lib/rack/attack/check.rb +1 -2
  9. data/lib/rack/attack/fail2ban.rb +2 -1
  10. data/lib/rack/attack/path_normalizer.rb +6 -8
  11. data/lib/rack/attack/safelist.rb +0 -1
  12. data/lib/rack/attack/store_proxy.rb +2 -4
  13. data/lib/rack/attack/store_proxy/dalli_proxy.rb +2 -3
  14. data/lib/rack/attack/store_proxy/mem_cache_proxy.rb +4 -5
  15. data/lib/rack/attack/store_proxy/redis_cache_store_proxy.rb +30 -0
  16. data/lib/rack/attack/store_proxy/redis_store_proxy.rb +4 -11
  17. data/lib/rack/attack/version.rb +1 -1
  18. data/spec/acceptance/cache_store_config_for_allow2ban_spec.rb +2 -2
  19. data/spec/acceptance/cache_store_config_for_fail2ban_spec.rb +2 -2
  20. data/spec/acceptance/cache_store_config_for_throttle_spec.rb +1 -1
  21. data/spec/acceptance/customizing_blocked_response_spec.rb +1 -1
  22. data/spec/acceptance/customizing_throttled_response_spec.rb +1 -1
  23. data/spec/acceptance/safelisting_ip_spec.rb +0 -1
  24. data/spec/acceptance/stores/mem_cache_store_spec.rb +38 -0
  25. data/spec/acceptance/stores/redis_cache_store_spec.rb +41 -0
  26. data/spec/allow2ban_spec.rb +6 -6
  27. data/spec/fail2ban_spec.rb +7 -7
  28. data/spec/integration/rack_attack_cache_spec.rb +4 -1
  29. data/spec/rack_attack_dalli_proxy_spec.rb +0 -2
  30. data/spec/rack_attack_spec.rb +6 -6
  31. data/spec/rack_attack_throttle_spec.rb +7 -7
  32. data/spec/rack_attack_track_spec.rb +5 -5
  33. data/spec/spec_helper.rb +3 -4
  34. data/spec/support/cache_store_helper.rb +58 -0
  35. metadata +65 -44
@@ -0,0 +1,58 @@
1
+ class Minitest::Spec
2
+ def self.it_works_for_cache_backed_features
3
+ it "works for throttle" do
4
+ Rack::Attack.throttle("by ip", limit: 1, period: 60) do |request|
5
+ request.ip
6
+ end
7
+
8
+ get "/", {}, "REMOTE_ADDR" => "1.2.3.4"
9
+ assert_equal 200, last_response.status
10
+
11
+ get "/", {}, "REMOTE_ADDR" => "1.2.3.4"
12
+ assert_equal 429, last_response.status
13
+ end
14
+
15
+ it "works for fail2ban" do
16
+ Rack::Attack.blocklist("fail2ban pentesters") do |request|
17
+ Rack::Attack::Fail2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do
18
+ request.path.include?("private-place")
19
+ end
20
+ end
21
+
22
+ get "/"
23
+ assert_equal 200, last_response.status
24
+
25
+ get "/private-place"
26
+ assert_equal 403, last_response.status
27
+
28
+ get "/private-place"
29
+ assert_equal 403, last_response.status
30
+
31
+ get "/"
32
+ assert_equal 403, last_response.status
33
+ end
34
+
35
+ it "works for allow2ban" do
36
+ Rack::Attack.blocklist("allow2ban pentesters") do |request|
37
+ Rack::Attack::Allow2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do
38
+ request.path.include?("scarce-resource")
39
+ end
40
+ end
41
+
42
+ get "/"
43
+ assert_equal 200, last_response.status
44
+
45
+ get "/scarce-resource"
46
+ assert_equal 200, last_response.status
47
+
48
+ get "/scarce-resource"
49
+ assert_equal 200, last_response.status
50
+
51
+ get "/scarce-resource"
52
+ assert_equal 403, last_response.status
53
+
54
+ get "/"
55
+ assert_equal 403, last_response.status
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-attack
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Suggs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-29 00:00:00.000000000 Z
11
+ date: 2018-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -25,35 +25,35 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: minitest
28
+ name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 3.0.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 3.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest-stub-const
42
+ name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 3.0.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 3.0.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: rack-test
56
+ name: appraisal
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: connection_pool
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: appraisal
84
+ name: dalli
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,35 +95,35 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: activesupport
98
+ name: guard-minitest
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 3.0.0
103
+ version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 3.0.0
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: actionpack
112
+ name: memcache-client
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 3.0.0
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 3.0.0
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: redis-activesupport
126
+ name: minitest
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: dalli
140
+ name: minitest-stub-const
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: connection_pool
154
+ name: pry
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,7 +165,7 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: memcache-client
168
+ name: rack-test
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
@@ -179,7 +179,7 @@ dependencies:
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: timecop
182
+ name: rake
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
@@ -193,7 +193,7 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: pry
196
+ name: redis-activesupport
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
@@ -207,7 +207,21 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
- name: guard-minitest
210
+ name: rubocop
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '='
214
+ - !ruby/object:Gem::Version
215
+ version: 0.55.0
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '='
221
+ - !ruby/object:Gem::Version
222
+ version: 0.55.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: timecop
211
225
  requirement: !ruby/object:Gem::Requirement
212
226
  requirements:
213
227
  - - ">="
@@ -268,6 +282,7 @@ files:
268
282
  - lib/rack/attack/store_proxy.rb
269
283
  - lib/rack/attack/store_proxy/dalli_proxy.rb
270
284
  - lib/rack/attack/store_proxy/mem_cache_proxy.rb
285
+ - lib/rack/attack/store_proxy/redis_cache_store_proxy.rb
271
286
  - lib/rack/attack/store_proxy/redis_store_proxy.rb
272
287
  - lib/rack/attack/throttle.rb
273
288
  - lib/rack/attack/track.rb
@@ -287,6 +302,8 @@ files:
287
302
  - spec/acceptance/safelisting_ip_spec.rb
288
303
  - spec/acceptance/safelisting_spec.rb
289
304
  - spec/acceptance/safelisting_subnet_spec.rb
305
+ - spec/acceptance/stores/mem_cache_store_spec.rb
306
+ - spec/acceptance/stores/redis_cache_store_spec.rb
290
307
  - spec/acceptance/throttling_spec.rb
291
308
  - spec/acceptance/track_spec.rb
292
309
  - spec/acceptance/track_throttle_spec.rb
@@ -301,7 +318,8 @@ files:
301
318
  - spec/rack_attack_throttle_spec.rb
302
319
  - spec/rack_attack_track_spec.rb
303
320
  - spec/spec_helper.rb
304
- homepage: http://github.com/kickstarter/rack-attack
321
+ - spec/support/cache_store_helper.rb
322
+ homepage: https://github.com/kickstarter/rack-attack
305
323
  licenses:
306
324
  - MIT
307
325
  metadata: {}
@@ -314,7 +332,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
314
332
  requirements:
315
333
  - - ">="
316
334
  - !ruby/object:Gem::Version
317
- version: 2.0.0
335
+ version: '2.2'
318
336
  required_rubygems_version: !ruby/object:Gem::Requirement
319
337
  requirements:
320
338
  - - ">="
@@ -322,37 +340,40 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
340
  version: '0'
323
341
  requirements: []
324
342
  rubyforge_project:
325
- rubygems_version: 2.7.3
343
+ rubygems_version: 2.7.7
326
344
  signing_key:
327
345
  specification_version: 4
328
346
  summary: Block & throttle abusive requests
329
347
  test_files:
330
- - spec/spec_helper.rb
331
- - spec/rack_attack_throttle_spec.rb
332
- - spec/rack_attack_spec.rb
333
348
  - spec/integration/offline_spec.rb
334
349
  - spec/integration/rack_attack_cache_spec.rb
335
- - spec/rack_attack_track_spec.rb
336
- - spec/fail2ban_spec.rb
337
- - spec/rack_attack_dalli_proxy_spec.rb
338
350
  - spec/rack_attack_path_normalizer_spec.rb
339
351
  - spec/acceptance/safelisting_subnet_spec.rb
340
352
  - spec/acceptance/track_throttle_spec.rb
341
- - spec/acceptance/blocking_ip_spec.rb
342
- - spec/acceptance/track_spec.rb
343
- - spec/acceptance/fail2ban_spec.rb
344
- - spec/acceptance/safelisting_ip_spec.rb
345
353
  - spec/acceptance/cache_store_config_for_fail2ban_spec.rb
354
+ - spec/acceptance/cache_store_config_with_rails_spec.rb
355
+ - spec/acceptance/cache_store_config_for_allow2ban_spec.rb
356
+ - spec/acceptance/safelisting_ip_spec.rb
357
+ - spec/acceptance/track_spec.rb
358
+ - spec/acceptance/blocking_subnet_spec.rb
359
+ - spec/acceptance/blocking_ip_spec.rb
360
+ - spec/acceptance/allow2ban_spec.rb
346
361
  - spec/acceptance/throttling_spec.rb
347
362
  - spec/acceptance/blocking_spec.rb
348
- - spec/acceptance/customizing_blocked_response_spec.rb
349
- - spec/acceptance/cache_store_config_for_throttle_spec.rb
350
- - spec/acceptance/blocking_subnet_spec.rb
351
363
  - spec/acceptance/customizing_throttled_response_spec.rb
352
- - spec/acceptance/allow2ban_spec.rb
353
- - spec/acceptance/cache_store_config_for_allow2ban_spec.rb
354
- - spec/acceptance/cache_store_config_with_rails_spec.rb
355
364
  - spec/acceptance/extending_request_object_spec.rb
356
365
  - spec/acceptance/safelisting_spec.rb
357
- - spec/rack_attack_request_spec.rb
366
+ - spec/acceptance/cache_store_config_for_throttle_spec.rb
367
+ - spec/acceptance/fail2ban_spec.rb
368
+ - spec/acceptance/stores/mem_cache_store_spec.rb
369
+ - spec/acceptance/stores/redis_cache_store_spec.rb
370
+ - spec/acceptance/customizing_blocked_response_spec.rb
371
+ - spec/spec_helper.rb
358
372
  - spec/allow2ban_spec.rb
373
+ - spec/rack_attack_dalli_proxy_spec.rb
374
+ - spec/rack_attack_spec.rb
375
+ - spec/rack_attack_throttle_spec.rb
376
+ - spec/rack_attack_request_spec.rb
377
+ - spec/fail2ban_spec.rb
378
+ - spec/rack_attack_track_spec.rb
379
+ - spec/support/cache_store_helper.rb