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. Extraire en toute sécurité l'IP réelle derrière les équilibreurs de charge/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)
# Ignorer les IP de développement local
if ip and ip not in ['127.0.0.1', '::1']:
try:
# 2. Interroger l'API ProxyTracer avec un timeout strict
response = requests.get(
f"https://api.proxytracer.com/v1/check/{ip}",
headers={"Authorization": f"Bearer {self.api_key}"},
timeout=0.5 # Délai d'attente strict de 500ms pour éviter les goulots d'étranglement
)
if response.status_code == 200:
data = response.json()
# 3. Interrompre la connexion si un proxy/VPN est détecté
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 : journaliser l'erreur et laisser passer la requête
print(f"ProxyTracer validation failed: {e}")
# 4. Le trafic est sain, poursuivre vers la vue
response = self.get_response(request)
return responseConfiguration :
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',
# ...
]Dernière mise à jour le