Class: HttpMimic::Waf::Detector
- Inherits:
-
Object
- Object
- HttpMimic::Waf::Detector
- Defined in:
- lib/http_mimic/waf/detector.rb
Class Method Summary collapse
- .akamai?(response) ⇒ Boolean
- .challenge_page?(response) ⇒ Boolean
- .cloudflare?(response) ⇒ Boolean
- .datadome?(response) ⇒ Boolean
- .detect(response) ⇒ Object
Class Method Details
.akamai?(response) ⇒ Boolean
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/http_mimic/waf/detector.rb', line 30 def akamai?(response) return true if response.headers['set-cookie']&.include?('_abck=') return true if response..key?('_abck') || response..key?('bm_sz') || response..key?('ak_bmsc') return true if response.headers['x-akamai-transformed'] || response.headers['x-reference-error'] body = response.body.to_s return true if body.include?('Reference Error:') && body.include?('Akamai') return true if body.include?('bmak') || body.include?('sensor_data') return true if body.include?('sec-if-cpt-container') || body.include?('sec-bc-button-parent') return true if body =~ /<script[^>]*src=["\x27]([^"\x27]*\/[a-zA-Z0-9_-]{10,}\?[a-zA-Z0-9_=-]+)["\x27]/ false end |
.challenge_page?(response) ⇒ Boolean
21 22 23 24 25 26 27 28 |
# File 'lib/http_mimic/waf/detector.rb', line 21 def challenge_page?(response) return false unless response body = response.body.to_s return true if body.include?('sec-if-cpt-container') || body.include?('sec-bc-button-parent') return true if body.include?('challenges.cloudflare.com') || body.include?('cf-turnstile') return true if body.include?('datadome.captcha') || body.include?('geo.captcha-delivery.com') false end |
.cloudflare?(response) ⇒ Boolean
44 45 46 47 48 49 50 |
# File 'lib/http_mimic/waf/detector.rb', line 44 def cloudflare?(response) return true if response.headers['server']&.downcase&.include?('cloudflare') return true if response.headers['cf-ray'] || response..key?('cf_clearance') return true if response.body.to_s.include?('challenges.cloudflare.com') false end |
.datadome?(response) ⇒ Boolean
52 53 54 55 56 57 |
# File 'lib/http_mimic/waf/detector.rb', line 52 def datadome?(response) return true if response.headers['x-datadome'] || response..key?('datadome') return true if response.headers['server']&.downcase&.include?('datadome') false end |
.detect(response) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/http_mimic/waf/detector.rb', line 7 def detect(response) return nil unless response if akamai?(response) :akamai elsif cloudflare?(response) :cloudflare elsif datadome?(response) :datadome else nil end end |