Django (Python)
Django uygulamalarında IP doğrulamasını zorunlu kılmanın en güvenli yolu özel bir middleware sınıfı oluşturmaktır. Bu, kötü amaçlı trafiğin Django view'larınıza ulaşmadan veya veritabanı bağlantılarını tüketmeden önce reddedilmesini sağlar.
Middleware
Bu middleware istemcinin gerçek IP'sini güvenli bir şekilde belirler, ProxyTracer'ı sorgulamak için standart requests kütüphanesini kullanır ve istek yaşam döngüsünü hemen durdurmak için ham bir HttpResponseForbidden döndürür.
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. Yük dengeleyicilerin/NGINX'in arkasındaki gerçek IP'yi güvenli bir şekilde çıkarın
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)
# Yerel geliştirme IP'lerini atlayın
if ip and ip not in ['127.0.0.1', '::1']:
try:
# 2. Kesin bir zaman aşımı ile ProxyTracer API'sini sorgulayın
response = requests.get(
f"https://api.proxytracer.com/v1/check/{ip}",
headers={"Authorization": f"Bearer {self.api_key}"},
timeout=0.5 # Darboğazları önlemek için kesin 500ms zaman aşımı
)
if response.status_code == 200:
data = response.json()
# 3. Proxy/VPN tespit edilirse bağlantıyı kesin
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: Hatayı günlüğe kaydedin ve isteğin geçmesine izin verin
print(f"ProxyTracer validation failed: {e}")
# 4. Trafik temiz, view'a devam edin
response = self.get_response(request)
return responseYapılandırma:
Korumayı etkinleştirmek için middleware'i settings.py dosyanıza kaydedin. Kötü trafiği erkenden kesmek için middleware yığınının üst sıralarına (güvenlik ve oturum middleware'lerinin hemen sonrasına) yerleştirin.
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# ...
'your_app.middleware.ProxyTracerMiddleware',
# ...
]Son güncelleme tarihi