Ruby on Rails
لدمج ProxyTracer في تطبيق Rails بأقصى قدر من الكفاءة، نتجاوز طبقة المتحكم بالكامل ونبني برمجية وسيطة مخصصة لـ Rack. يعترض هذا الطلب الخام لـ HTTP قبل دخوله موجه Rails.
برمجية Rack الوسيطة
تستفيد هذه البرمجية الوسيطة من كائن Rack::Request الأصلي لاستخراج عنوان IP بأمان (معالجة الترويسات المزيفة تلقائياً) وتستخدم مكتبة Net::HTTP القياسية في Ruby لفرض مهلة زمنية صارمة.
require 'net/http'
require 'json'
class ProxyTracerMiddleware
def initialize(app)
@app = app
@api_key = ENV['PROXYTRACER_API_KEY']
end
def call(env)
# 1. استخراج عنوان IP (ينظف Rack ترويسة X-Forwarded-For تلقائياً)
request = Rack::Request.new(env)
ip = request.ip
# تخطي التطوير المحلي
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 بمهلة صارمة قدرها 500 مللي ثانية
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. قطع الاتصال فوراً إذا تم اكتشاف بروكسي
if data['proxy'] == true
return [
403,
{ 'Content-Type' => 'application/json' },
['{"error": "Access Denied: VPN or Proxy detected."}']
]
end
end
rescue StandardError => e
# Fail open: تسجيل الخطأ والسماح للطلب بالمتابعة
Rails.logger.error("ProxyTracer validation failed: #{e.message}")
end
end
# 4. حركة المرور نظيفة، المتابعة عبر مكدس Rack إلى موجه Rails
@app.call(env)
end
endالتكوين:
لتفعيل الحماية عالمياً، أدرج البرمجية الوسيطة في مكدس تطبيقك داخل config/application.rb:
module YourApp
class Application < Rails::Application
# ...
# إدراجه في مرتبة متقدمة في المكدس لرفض حركة المرور الخبيثة مبكراً
config.middleware.insert_before Rack::Sendfile, ProxyTracerMiddleware
# ...
end
endآخر تحديث في