Skip to Content

Ruby on Rails

Um ProxyTracer mit maximaler Effizienz in eine Rails-Anwendung zu integrieren, umgehen wir die Controller-Ebene vollständig und erstellen eine benutzerdefinierte Rack-Middleware. Diese fängt die rohe HTTP-Anfrage ab, bevor sie den Rails-Router erreicht.

Die Rack-Middleware

Diese Middleware nutzt das native Rack::Request-Objekt, um die IP sicher zu extrahieren (gefälschte Header werden automatisch behandelt), und verwendet Rubys Standard-Net::HTTP-Bibliothek, um ein striktes Timeout zu erzwingen.

require 'net/http' require 'json' class ProxyTracerMiddleware def initialize(app) @app = app @api_key = ENV['PROXYTRACER_API_KEY'] end def call(env) # 1. IP extrahieren (Rack bereinigt X-Forwarded-For automatisch) request = Rack::Request.new(env) ip = request.ip # Lokale Entwicklung überspringen 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. ProxyTracer-API mit einem strikten 500ms-Timeout abfragen 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. Verbindung sofort trennen, falls ein Proxy erkannt wird if data['proxy'] == true return [ 403, { 'Content-Type' => 'application/json' }, ['{"error": "Access Denied: VPN or Proxy detected."}'] ] end end rescue StandardError => e # Fail-Open: Fehler protokollieren und Anfrage fortsetzen lassen Rails.logger.error("ProxyTracer validation failed: #{e.message}") end end # 4. Traffic ist sauber, im Rack-Stack weiter zum Rails-Router fortfahren @app.call(env) end end

Konfiguration:

Um den Schutz global zu aktivieren, fügen Sie die Middleware in Ihren Anwendungs-Stack innerhalb von config/application.rb ein:

module YourApp class Application < Rails::Application # ... # Weit oben im Stack einfügen, um schädlichen Traffic frühzeitig abzuweisen config.middleware.insert_before Rack::Sendfile, ProxyTracerMiddleware # ... end end
Zuletzt aktualisiert am