Skip to Content

Django (Python)

بالنسبة لتطبيقات Django، فإن الطريقة الأكثر أماناً لفرض التحقق من IP هي إنشاء فئة برمجية وسيطة مخصصة. يضمن ذلك رفض حركة المرور الخبيثة قبل أن تصل إلى عروض Django أو تستهلك اتصالات قاعدة البيانات.

البرمجية الوسيطة

تحدد هذه البرمجية الوسيطة عنوان IP الحقيقي للعميل بأمان، وتستخدم مكتبة requests القياسية للاستعلام من ProxyTracer، وترجع كائن HttpResponseForbidden خام لإيقاف دورة حياة الطلب على الفور.

import os import requests from django.http import HttpResponseForbidden class ProxyTracerMiddleware: def __init__(self, get_response): self.get_response = get_response self.api_key = os.environ.get("PROXYTRACER_API_KEY") def get_client_ip(self, request): # 1. استخراج عنوان IP الحقيقي بأمان خلف موازنات الحمل/NGINX x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0].strip() else: ip = request.META.get('REMOTE_ADDR') return ip def __call__(self, request): ip = self.get_client_ip(request) # تخطي عناوين IP للتطوير المحلي if ip and ip not in ['127.0.0.1', '::1']: try: # 2. الاستعلام من ProxyTracer API بمهلة صارمة response = requests.get( f"https://api.proxytracer.com/v1/check/{ip}", headers={"Authorization": f"Bearer {self.api_key}"}, timeout=0.5 # مهلة صارمة 500 مللي ثانية لمنع الاختناقات ) if response.status_code == 200: data = response.json() # 3. قطع الاتصال إذا تم اكتشاف بروكسي/VPN if data.get("proxy") is True: return HttpResponseForbidden( '{"error": "Access Denied: VPN or Proxy detected."}', content_type="application/json" ) except requests.RequestException as e: # Fail open: تسجيل الخطأ والسماح بتمرير الطلب print(f"ProxyTracer validation failed: {e}") # 4. حركة المرور نظيفة، المتابعة إلى العرض response = self.get_response(request) return response

التكوين:

لتفعيل الحماية، سجل البرمجية الوسيطة في ملف settings.py. ضعها في مرتبة متقدمة ضمن المكدس (مباشرة بعد برمجيات الأمان والجلسات) لإسقاط حركة المرور الخبيثة مبكراً.

# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # ... 'your_app.middleware.ProxyTracerMiddleware', # ... ]
آخر تحديث في