Schnittstellen

Webhooks in Schnittstellenentwicklung: Checkliste, typische Fehler, Best Practices

Webhooks richtig bauen: Retries, Signaturen, Idempotenz.

Webhooks richtig bauen: Retries, Signaturen, Idempotenz

Ein Webhook, der keine Signaturen validiert, ist eine offene Backdoor.

Was Webhooks von normalen API-Calls unterscheidet

Bei einem API-Call fragt der Client den Server. Bei einem Webhook schickt der Server dem Client eine Nachricht – ohne dass der Client gefragt hat. Das dreht das Sicherheitsmodell um: Wer sagt, dass diese Nachricht wirklich vom erwarteten Sender kommt?

Signatur-Validierung

Der Sender generiert einen HMAC-Signaturen aus dem Request-Body und einem geteilten Secret. Der Empfänger prüft diese Signatur. Nur wer das Secret kennt, kann eine gültige Signatur erzeugen.

Stripe macht das mit Stripe-Signature Header. GitHub mit X-Hub-Signature-256. Das Pattern ist überall gleich.

Und: Timing-Attack-sichere String-Vergleiche nutzen (hash_equals() in PHP, nicht ===).

Retry-Mechanismus

Webhooks scheitern. Der empfangende Server ist down, zu langsam, gibt einen 5xx zurück. Ein robustes Webhook-System retried – mit Exponential Backoff. Nach x Retries: Dead Letter Queue oder Alert.

Als Empfänger: immer schnell antworten (202 Accepted), dann asynchron verarbeiten. Timeout-Probleme vermeiden.

Idempotenz

Was passiert, wenn ein Webhook zweimal geliefert wird (kann passieren bei Retries)? Der Empfänger muss idempotent sein. Jede Webhook-Nachricht hat eine eindeutige ID – der Empfänger speichert, welche IDs bereits verarbeitet wurden.

Checkliste Webhooks

Signatur-Validierung implementiert (HMAC)
Timing-Attack-sichere Vergleiche (hash_equals)
Idempotenz-Check auf Webhook-Event-ID
Retry-Mechanismus mit Exponential Backoff
Dead Letter Queue für nicht zustellbare Nachrichten
Schnelle Response (202 Accepted), asynchrone Verarbeitung

Webhooks bauen oder absichern?

markom.digital entwickelt robuste Webhook-Systeme – auf Sender- und Empfänger-Seite.

Weitere Beiträge