Django (Python)
Integrare ProxyTracer in un'applicazione Django è semplice grazie a un middleware Django standard. Questo elabora ogni richiesta in ingresso prima che raggiunga le viste (views).
Il Middleware
Questo middleware determina in sicurezza l'IP reale del client, utilizza la libreria standard requests per interrogare ProxyTracer e restituisce un HttpResponseForbidden per interrompere immediatamente il ciclo di vita della richiesta.
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. Estrai in modo sicuro l'IP reale dietro i load balancer/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)
# Salta gli IP di sviluppo locale
if ip and ip not in ['127.0.0.1', '::1']:
try:
# 2. Interroga l'API ProxyTracer con un timeout rigoroso
response = requests.get(
f"https://api.proxytracer.com/v1/check/{ip}",
headers={"Authorization": f"Bearer {self.api_key}"},
timeout=0.5 # Timeout rigoroso di 500ms per prevenire colli di bottiglia
)
if response.status_code == 200:
data = response.json()
# 3. Interrompi la connessione se viene rilevato un 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: registra l'errore e lascia passare la richiesta
print(f"ProxyTracer validation failed: {e}")
# 4. Il traffico è pulito, procedi alla view
response = self.get_response(request)
return responseConfigurazione:
Aggiungi il middleware all'array MIDDLEWARE nel tuo file settings.py:
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# ...
'your_app.middleware.ProxyTracerMiddleware',
# ...
]Ultimo aggiornamento il