Skip to Content

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
آخر تحديث في