Skip to Content

Django (Python)

Für Django-Anwendungen ist die sicherste Methode zur Erzwingung der IP-Validierung das Erstellen einer benutzerdefinierten Middleware-Klasse. Dies stellt sicher, dass bösartiger Traffic abgewiesen wird, bevor er Ihre Django-Views erreicht oder Datenbankverbindungen belegt.

Die Middleware

Diese Middleware ermittelt sicher die reale IP des Clients, verwendet die Standardbibliothek requests, um ProxyTracer abzufragen, und gibt direkt einen HttpResponseForbidden zurück, um den Request-Lebenszyklus sofort zu stoppen.

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. Echte IP hinter Load-Balancern/NGINX sicher extrahieren 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) # Lokale Entwicklungs-IPs überspringen if ip and ip not in ['127.0.0.1', '::1']: try: # 2. ProxyTracer-API mit einem strikten Timeout abfragen response = requests.get( f"https://api.proxytracer.com/v1/check/{ip}", headers={"Authorization": f"Bearer {self.api_key}"}, timeout=0.5 # Striktes 500ms-Timeout zur Vermeidung von Engpässen ) if response.status_code == 200: data = response.json() # 3. Verbindung trennen, falls ein Proxy/VPN erkannt wird 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: Fehler protokollieren und Anfrage durchlassen print(f"ProxyTracer validation failed: {e}") # 4. Traffic ist sauber, weiter zur View response = self.get_response(request) return response

Konfiguration:

Um den Schutz zu aktivieren, registrieren Sie die Middleware in Ihrer settings.py. Platzieren Sie sie weit oben im Stack (direkt nach Sicherheits- und Session-Middlewares), um schlechten Traffic frühzeitig zu blockieren.

# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # ... 'your_app.middleware.ProxyTracerMiddleware', # ... ]
Zuletzt aktualisiert am