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',
# ...
]Последнее обновление: