Fri Jan 09 2026
...
Webhook-Sicherheitsupdate
Neuigkeiten
Früher gab es zusätzliche Hürden bei der Einrichtung von Webhooks im Vergleich zu anderen Plattformen. Wir hielten das für positiv, da es zusätzliche Sicherheitsmaßnahmen erforderte. Wir haben jedoch kürzlich einen Mechanismus festgelegt, der ebenso sicher ist, aber bei dem die Sicherheit optional ist.
Vorheriges Verhalten
Früher übermittelte das System Ihren API-Schlüssel in Payloads und erwartete, dass Sie diesen validieren. Wenn Sie bei einem ungültigen API-Schlüssel kein 401 zurückgaben, ließ das System die Einrichtung nicht zu.
Neues Verhalten
Jetzt wird das System bei neuen Webhook-Konfigurationen keinen API-Schlüssel übermitteln. Stattdessen wird für neue und bestehende Integrationen eine signierte HMAC-Signatur hinzugefügt. Sie können entscheiden, ob Sie diese Signatur validieren möchten, abhängig von der erforderlichen Sicherheitsstufe.
Bestehende Konfigurationen werden weiterhin den API-Schlüssel übermitteln – Sie können jetzt über ein Support-Ticket anfordern, dies auszuschalten.
HMAC-Signaturverifizierung
FastComments sendet jetzt die folgenden Header mit jeder Webhook-Anfrage:
| Header | Beschreibung |
|---|---|
X-FastComments-Timestamp |
Unix-Zeitstempel (Sekunden), wann die Anfrage signiert wurde |
X-FastComments-Signature |
HMAC-SHA256-Signatur im Format sha256=<hex> |
token |
Ihr API-Geheimnis (zur Rückwärtskompatibilität beibehalten) |
Wie die Signatur berechnet wird
- Verkettung:
timestamp + "." + JSON_payload_body - HMAC-SHA256 mit Ihrem API-Geheimnis als Schlüssel berechnen
- Ergebnis hexadezimal kodieren
Beispielverifizierung (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# Überprüfen, ob der Zeitstempel aktuell ist
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Überprüfen der Signatur
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
Auswahl der HTTP-Methode
Zusätzlich zu diesem Update – Sie können jetzt die HTTP-Methode für jeden Webhook-Ereignistyp konfigurieren:
- Ereignis erstellen: POST oder PUT (Standard: PUT)
- Ereignis aktualisieren: POST oder PUT (Standard: PUT)
- Ereignis löschen: DELETE, POST oder PUT (Standard: DELETE)
Sicherheitsvorteile
Das neue System hat einige Vorteile:
- Schutz vor Man-in-the-Middle-Angriffen
- Verhinderung von Replay-Angriffen durch Zeitstempelüberprüfung
- Erkennung von Payload-Manipulationen
Rückwärtskompatibilität
Der token-Header, der Ihr API-Geheimnis enthält, wird weiterhin mit jeder Anfrage gesendet. Bestehende Integrationen werden weiterhin ohne Änderungen funktionieren, und wie
bereits erwähnt, können Sie anfordern, das alte Verhalten über den Support abzuschalten.
Dokumentation
Für die vollständige Dokumentation siehe unseren Webhooks-Leitfaden.
Fazit
Wie bei allen größeren Veröffentlichungen sind wir froh, dass wir uns die Zeit nehmen konnten, diese Änderungen zu optimieren, zu testen und ordnungsgemäß zu veröffentlichen. Lassen Sie uns unten wissen, ob Sie irgendwelche Probleme entdecken.
Prost!
