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',
# ...
]آخر تحديث في