bpalmen-httpbl 0.1.2 → 0.1.3

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 (3) hide show
  1. data/README +14 -4
  2. data/lib/httpbl.rb +17 -7
  3. metadata +1 -1
data/README CHANGED
@@ -17,7 +17,7 @@ crawling, comment-spamming, dictionary attacks, and email-harvesting.
17
17
  Installation
18
18
  ------------
19
19
 
20
- gem install httpbl
20
+ gem install bpalmen-httpbl
21
21
 
22
22
  Basic Usage
23
23
  ------------
@@ -33,7 +33,7 @@ To add HttpBL to your middleware stack, simply add the following to config.ru:
33
33
 
34
34
  For Rails 2.3+ add the following to environment.rb:
35
35
 
36
- config.gem 'httpbl'
36
+ require 'httpbl'
37
37
 
38
38
  config.middleware.use HttpBL, :api_key => "YOUR API KEY"
39
39
 
@@ -51,7 +51,7 @@ To customize HttpBL's filtering behavior, use the available options:
51
51
  :deny_types => [1, 2, 4],
52
52
  :threat_level_threshold => 0,
53
53
  :age_threshold => 5,
54
- :blocked_search_engines => [0]
54
+ :blocked_search_engines => [0],
55
55
 
56
56
  Available Options:
57
57
 
@@ -134,4 +134,14 @@ customize the particular types of suspicious activity you wish to thwart:
134
134
  8: MSN
135
135
  9: Yahoo
136
136
  10: Cuil
137
- 11: InfoSeek
137
+ 11: InfoSeek
138
+
139
+ :dns_timeout => 0.5
140
+
141
+ DNS requests to the Http:BL service should NEVER take this long, but if
142
+ they do, you can modify this setting to prevent the application from
143
+ hanging until a system default timeout. Of course, setting this timeout
144
+ too low will essentially disable the filter (but 0 is a bad idea), if responses
145
+ can't be returned from the API before the request is permitted, by default.
146
+ Best not to mess with it unless you know what you're doing - it's a safety
147
+ mechanism.
@@ -8,8 +8,10 @@ class HttpBL
8
8
  @options = {:blocked_search_engines => [],
9
9
  :age_threshold => 10,
10
10
  :threat_level_threshold => 2,
11
- :deny_types => [1, 2, 4, 8, 16, 32, 64, 128]
12
11
  # 8..128 aren't used as of 3/2009, but might be used in the future
12
+ :deny_types => [1, 2, 4, 8, 16, 32, 64, 128],
13
+ # DONT set this to 0
14
+ :dns_timeout => 0.5
13
15
  }.merge(options)
14
16
  raise "Missing :api_key for Http:BL middleware" unless @options[:api_key]
15
17
  end
@@ -19,14 +21,22 @@ class HttpBL
19
21
  end
20
22
 
21
23
  def _call(env)
22
- ip = Rack::Request.new(env).ip
23
- query = @options[:api_key] + '.' + ip.split('.').reverse.join('.') + '.dnsbl.httpbl.org'
24
- @bl_response = (Resolv::DNS.new.getaddress(query).to_s rescue nil)
25
- if @bl_response and blocked?(@bl_response)
26
- [403, {"Content-Type" => "text/html"}, "<h1>403 Forbidden</h1> Request IP is listed as suspicious by <a href='http://projecthoneypot.org/ip_#{ip}'>Project Honeypot</a>"]
24
+ request = Rack::Request.new(env)
25
+ bl_status = resolve(request.ip)
26
+ if bl_status and blocked?(bl_status)
27
+ [403, {"Content-Type" => "text/html"}, "<h1>403 Forbidden</h1> Request IP is listed as suspicious by <a href='http://projecthoneypot.org/ip_#{request.ip}'>Project Honeypot</a>"]
27
28
  else
28
29
  @app.call(env)
29
30
  end
31
+
32
+ end
33
+
34
+ def resolve(ip)
35
+ query = @options[:api_key] + '.' + ip.split('.').reverse.join('.') + '.dnsbl.httpbl.org'
36
+ Timeout::timeout(@options[:dns_timeout]) do
37
+ Resolv::DNS.new.getaddress(query).to_s rescue nil
38
+ end
39
+ rescue Timeout::Error, Errno::ECONNREFUSED
30
40
  end
31
41
 
32
42
  def blocked?(response)
@@ -46,4 +56,4 @@ class HttpBL
46
56
  return @blocked
47
57
  end
48
58
 
49
- end
59
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bpalmen-httpbl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Palmen