Skip to Content
DocumentationBackendDjango (Python)

Django (Python)

Para aplicaciones Django, la forma más segura de imponer la validación de IP es creando una clase de middleware personalizada. Esto asegura que el tráfico malicioso sea rechazado antes de que llegue a tus vistas de Django o consuma conexiones a la base de datos.

El Middleware

Este middleware determina con seguridad la IP real del cliente, utiliza la biblioteca estándar requests para consultar ProxyTracer y devuelve una respuesta en bruto HttpResponseForbidden para detener el ciclo de vida de la solicitud inmediatamente.

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

Configuración

Para activar la protección, registra el middleware en tu archivo settings.py. Colócalo en una posición alta dentro de la pila (justo después de los middlewares de seguridad y sesión) para descartar el tráfico malicioso a tiempo.

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