python / intermediate
Snippet
View-Zugriffskontrolle mit benutzerdefinierten Funktions-Dekoratoren und Cache-Zählern
Der Schutz sensibler Django-View-Endpunkte vor Brute-Force-Angriffen oder Missbrauch kann durch Schreiben benutzerdefinierter Funktions-Dekoratoren erreicht werden. Die Nutzung des Django-Caching-Frameworks innerhalb von Dekoratoren ermöglicht die dynamische Nachverfolgung und Einschränkung der Anfragehäufigkeit pro IP mit minimaler Latenz.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from functools import wrapsfrom django.core.cache import cachefrom django.http import HttpResponseForbiddendef rate_limit_ip(max_requests=5, timeout=60):def decorator(view_func):@wraps(view_func)def _wrapped_view(request, *args, **kwargs):ip = request.META.get('REMOTE_ADDR')cache_key = f"rate_limit_{ip}"requests = cache.get(cache_key, 0)if requests >= max_requests:return HttpResponseForbidden("Rate limit exceeded")cache.set(cache_key, requests + 1, timeout)return view_func(request, *args, **kwargs)return _wrapped_viewreturn decorator
django
Erklärung
1
def rate_limit_ip(max_requests=5, timeout=60):
Äußere Factory-Funktion, die Konfigurationsparameter für Anfrage-Schwellenwerte und Ablaufzeiten akzeptiert.
2
@wraps(view_func)
Bewahrt die Metadaten der ursprünglichen View-Funktion wie Docstrings und Namensattribute.
3
cache_key = f"rate_limit_{ip}"
Erstellt einen eindeutigen Cache-Bezeichner, der von der IP-Adresse des Clients abgeleitet wird.
4
if requests >= max_requests:
Überprüft die Anfragehäufigkeit am Schwellenwert, bevor an die View-Behandlungsfunktion übergeben wird.