Skip to Content

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 response

Yapı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