Skip to Content

Ruby on Rails

Para integrar o ProxyTracer em uma aplicação Rails com a máxima eficiência, ignoramos a camada de controllers e construímos um Rack Middleware personalizado. Isso intercepta a requisição HTTP bruta antes mesmo que ela entre no roteador do Rails.

O Middleware Rack

Este middleware utiliza o objeto nativo Rack::Request para extrair o IP com segurança (tratando cabeçalhos falsificados automaticamente) e usa a biblioteca padrão Net::HTTP do Ruby para impor um timeout rigoroso.

require 'net/http' require 'json' class ProxyTracerMiddleware def initialize(app) @app = app @api_key = ENV['PROXYTRACER_API_KEY'] end def call(env) # 1. Extraia o IP (o Rack sanitiza automaticamente o cabeçalho X-Forwarded-For) request = Rack::Request.new(env) ip = request.ip # Ignorar ambiente de desenvolvimento local 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. Consulte a API do ProxyTracer com um timeout rigoroso de 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. Encerre a conexão imediatamente se um proxy for detectado if data['proxy'] == true return [ 403, { 'Content-Type' => 'application/json' }, ['{"error": "Access Denied: VPN or Proxy detected."}'] ] end end rescue StandardError => e # Fail-open: Registre o erro e permita que a requisição prossiga Rails.logger.error("ProxyTracer validation failed: #{e.message}") end end # 4. O tráfego é legítimo, prossiga pela pilha do Rack até o roteador do Rails @app.call(env) end end

Configuração:

Para ativar a proteção globalmente, insira o middleware na pilha da sua aplicação dentro de config/application.rb:

module YourApp class Application < Rails::Application # ... # Insira-o no topo da pilha para rejeitar tráfego malicioso logo no início config.middleware.insert_before Rack::Sendfile, ProxyTracerMiddleware # ... end end
Última atualização