Skip to Content

Django (Python)

Для приложений Django наиболее безопасный способ обеспечения проверки IP — создание собственного middleware. Это гарантирует, что вредоносный трафик отклоняется до попадания в представления (views) Django или до установления подключений к базе данных.

Middleware

Этот middleware безопасно определяет реальный IP клиента, использует стандартную библиотеку requests для вызова ProxyTracer и возвращает сырой ответ HttpResponseForbidden, чтобы немедленно прервать жизненный цикл запроса.

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. Безопасно извлечь реальный IP за балансировщиками нагрузки/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) # Пропускать IP-адреса локальной разработки if ip and ip not in ['127.0.0.1', '::1']: try: # 2. Выполнить запрос к API ProxyTracer со строгим таймаутом response = requests.get( f"https://api.proxytracer.com/v1/check/{ip}", headers={"Authorization": f"Bearer {self.api_key}"}, timeout=0.5 # Строгий таймаут 500 мс для предотвращения узких мест ) if response.status_code == 200: data = response.json() # 3. Сбросить соединение, если обнаружен прокси/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: записать ошибку в лог и пропустить запрос print(f"ProxyTracer validation failed: {e}") # 4. Трафик чист, перейти к представлению response = self.get_response(request) return response

Конфигурация

Чтобы активировать защиту, добавьте middleware в ваш файл settings.py. Разместите его выше в стеке (сразу после middleware безопасности и сессий), чтобы как можно раньше отбрасывать нежелательный трафик.

# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # ... 'your_app.middleware.ProxyTracerMiddleware', # ... ]
Последнее обновление: