Skip to Content

Django (Python)

W aplikacjach Django najbezpieczniejszym sposobem wymuszenia walidacji IP jest stworzenie dedykowanej klasy middleware. Gwarantuje to odrzucenie złośliwego ruchu, zanim dotrze do widoków Django lub zajmie połączenia z bazą danych.

Middleware

To middleware bezpiecznie określa prawdziwy adres IP klienta, używa standardowej biblioteki requests do odpytania ProxyTracer i zwraca bezpośrednią odpowiedź HttpResponseForbidden, natychmiast zatrzymując cykl życia żądania.

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. Bezpiecznie pobierz prawdziwy adres IP zza load balancerów / 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) # Pomiń lokalne adresy IP środowiska deweloperskiego if ip and ip not in ['127.0.0.1', '::1']: try: # 2. Odpytaj API ProxyTracer ze ścisłym limitem czasu response = requests.get( f"https://api.proxytracer.com/v1/check/{ip}", headers={"Authorization": f"Bearer {self.api_key}"}, timeout=0.5 # Ścisły limit czasu 500 ms, aby zapobiec powstawaniu zatorów ) if response.status_code == 200: data = response.json() # 3. Odrzuć połączenie, jeśli wykryto proxy/VPN 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: Zaloguj błąd i przepuść żądanie print(f"ProxyTracer validation failed: {e}") # 4. Ruch jest czysty, przekaż żądanie do widoku response = self.get_response(request) return response

Konfiguracja:

Aby aktywować ochronę, zarejestruj middleware w pliku settings.py. Umieść go wysoko w stosie middleware (zaraz po middleware odpowiadających za bezpieczeństwo i sesje), aby wcześnie odrzucać niepożądany ruch.

# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # ... 'your_app.middleware.ProxyTracerMiddleware', # ... ]
Ostatnia aktualizacja: