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 responseKonfiguration:
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