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
endYapı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
endSon güncelleme tarihi