Skip to Content

Django (Python)

Pour les applications Django, le moyen le plus sûr d'appliquer la validation IP est de créer une classe d'intergiciel personnalisée. Cela garantit que le trafic malveillant est rejeté avant d'atteindre vos vues Django ou de consommer des connexions à la base de données.

L'Intergiciel

Cet intergiciel détermine en toute sécurité la véritable adresse IP du client, utilise la bibliothèque standard requests pour interroger ProxyTracer, et renvoie une réponse brute HttpResponseForbidden pour arrêter immédiatement le cycle de vie de la requête.

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. Safely extract the real IP behind load balancers/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) # Skip local development IPs if ip and ip not in ['127.0.0.1', '::1']: try: # 2. Query ProxyTracer API with a strict timeout response = requests.get( f"https://api.proxytracer.com/v1/check/{ip}", headers={"Authorization": f"Bearer {self.api_key}"}, timeout=0.5 # Strict 500ms timeout to prevent bottlenecks ) if response.status_code == 200: data = response.json() # 3. Drop the connection if a proxy/VPN is detected 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: Log the error and allow the request through print(f"ProxyTracer validation failed: {e}") # 4. Traffic is clean, proceed to the view response = self.get_response(request) return response

Configuration

Pour activer la protection, enregistrez l'intergiciel dans votre fichier settings.py. Placez-le haut dans la pile (juste après les intergiciels de sécurité et de session) pour bloquer rapidement le trafic indésirable.

# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # ... 'your_app.middleware.ProxyTracerMiddleware', # ... ]
Last updated on