python / intermediate
Snippet
Webhook-HMAC-Signaturvalidierung in Django-Request-Handlern
Die Validierung eingehender Webhook-Payloads mittels HMAC-Digests gewährleistet die Datenauthentizität und verhindert Manipulationen. Durch den Vergleich von Hashes in konstanter Zeit schützen Request-Handler vor Timing-Angriffen, während Anfragen vor der Verarbeitung validiert werden.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import hmacimport hashlibfrom django.conf import settingsfrom django.http import HttpResponseForbidden, JsonResponsedef verify_webhook_signature(request):signature = request.headers.get('X-Signature-256')if not signature:return HttpResponseForbidden('Missing signature header')expected_hash = hmac.new(settings.WEBHOOK_SECRET.encode(),request.body,hashlib.sha256).hexdigest()if not hmac.compare_digest(signature, expected_hash):return HttpResponseForbidden('Invalid payload signature')return JsonResponse({'status': 'verified'})
django
Erklärung
1
signature = request.headers.get('X-Signature-256')
Extrahiert den kryptografischen Signatur-Header des externen Webhook-Anbieters.
2
expected_hash = hmac.new(settings.WEBHOOK_SECRET.encode(), request.body, hashlib.sha256).hexdigest()
Berechnet einen SHA-256-HMAC-Hash unter Verwendung des geheimen Schlüssels und der Rohdaten des Requests.
3
if not hmac.compare_digest(signature, expected_hash):
Verwendet einen Vergleichsalgorithmus in konstanter Zeit, um Signaturen ohne Timing-Seitenkanal-Schwachstellen abzugleichen.