Skip to Content

Ruby on Rails

ProxyTracer'ı maksimum verimlilikle bir Rails uygulamasına entegre etmek için controller katmanını tamamen atlar ve özel bir Rack Middleware oluştururuz. Bu, ham HTTP isteğini Rails router'ına girmeden önce yakalar.

Rack Middleware

Bu middleware, IP'yi güvenli bir şekilde çıkarmak için yerel Rack::Request nesnesinden yararlanır (sahte başlıkları otomatik olarak yönetir) ve kesin bir zaman aşımı uygulamak için Ruby'nin standart Net::HTTP kütüphanesini kullanır.

require 'net/http' require 'json' class ProxyTracerMiddleware def initialize(app) @app = app @api_key = ENV['PROXYTRACER_API_KEY'] end def call(env) # 1. IP'yi çıkarın (Rack, X-Forwarded-For başlığını otomatik olarak temizler) request = Rack::Request.new(env) ip = request.ip # Yerel geliştirmeyi atlayın 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. Kesin bir 500ms zaman aşımı ile ProxyTracer API'sini sorgulayın 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. Proxy tespit edilirse bağlantıyı derhal kesin if data['proxy'] == true return [ 403, { 'Content-Type' => 'application/json' }, ['{"error": "Access Denied: VPN or Proxy detected."}'] ] end end rescue StandardError => e # Fail open: Hatayı günlüğe kaydedin ve isteğin devam etmesine izin verin Rails.logger.error("ProxyTracer validation failed: #{e.message}") end end # 4. Trafik temiz, Rack yığını boyunca Rails router'ına devam edin @app.call(env) end end

Yapılandırma:

Korumayı global olarak etkinleştirmek için middleware'i config/application.rb içindeki uygulama yığınınıza ekleyin:

module YourApp class Application < Rails::Application # ... # Kötü trafiği erkenden reddetmek için yığının üst sıralarına yerleştirin config.middleware.insert_before Rack::Sendfile, ProxyTracerMiddleware # ... end end
Son güncelleme tarihi