Skip to Content
DocumentationBackend-runtimesRuby on Rails (Ruby)

Ruby on Rails

Om ProxyTracer met maximale efficiëntie in een Rails-applicatie te integreren, omzeilen we de controllerlaag volledig en bouwen we een custom Rack Middleware. Dit onderschept het raw HTTP-request voordat het de Rails router binnenkomt.

De Rack Middleware

Deze middleware maakt gebruik van het native Rack::Request object om het IP-adres veilig te extraheren (waarbij spoofed headers automatisch worden afgevangen) en gebruikt Ruby's standaard Net::HTTP library om een strikte timeout af te dwingen.

require 'net/http' require 'json' class ProxyTracerMiddleware def initialize(app) @app = app @api_key = ENV['PROXYTRACER_API_KEY'] end def call(env) # 1. Extraheer het IP-adres (Rack schoont X-Forwarded-For automatisch op) request = Rack::Request.new(env) ip = request.ip # Sla lokale ontwikkeling over if ip && !['127.0.0.1', '::1'].include?(ip) begin uri = URI("https://api.proxytracer.com/v1/check/#{ip}") req = Net::HTTP::Get.new(uri) req['Authorization'] = "Bearer #{@api_key}" # 2. Raadpleeg de ProxyTracer API met een strikte timeout van 500ms response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: 0.5) do |http| http.request(req) end if response.is_a?(Net::HTTPSuccess) data = JSON.parse(response.body) # 3. Verbreek de verbinding onmiddellijk als er een proxy wordt gedetecteerd if data['proxy'] == true return [ 403, { 'Content-Type' => 'application/json' }, ['{"error": "Access Denied: VPN or Proxy detected."}'] ] end end rescue StandardError => e # Fail open: Log de fout en laat het verzoek doorgaan Rails.logger.error("ProxyTracer validation failed: #{e.message}") end end # 4. Verkeer is schoon, ga verder door de Rack-stack naar de Rails-router @app.call(env) end end

Configuratie:

Om de bescherming globaal in te schakelen, voeg je de middleware in je applicatie-stack in binnen config/application.rb:

module YourApp class Application < Rails::Application # ... # Plaats dit hoog in de stack om schadelijk verkeer vroegtijdig te weigeren config.middleware.insert_before Rack::Sendfile, ProxyTracerMiddleware # ... end end
Laatst bijgewerkt op