Warum sind Sie hier?
Verschwenden wir keine Zeit. Sie sind hier, weil Sie eine Webhook-Funktion in Ihrer App implementieren. Leider kann aus Sicherheitssicht einiges schiefgehen. Dieser Artikel soll sicherstellen, dass Sie beim Erstellen von Webhooks keine bekannten Fehler machen.
Wie funktionieren Webhooks?
Zur kurzen Zusammenfassung: Webhooks sind HTTP(S)-Anfragen an Dritte, um diese über ein Ereignis in Ihrer App zu informieren. Wenn Sie beispielsweise eine Anwendung anbieten, die Rechnungen generiert, könnten Sie Ihren Kunden die Möglichkeit bieten, eine Webhook-Funktionalität einzurichten, die ausgelöst wird, wenn eine neue Rechnung erstellt wird. Das bedeutet, dass Ihre Anwendung bei der Rechnungserstellung eine HTTP(S)-Anfrage an einen vom Benutzer festgelegten Ort sendet. Der Benutzer kann dies nutzen, um eigene benutzerdefinierte Workflows einzurichten, die durch den Webhook ausgelöst werden, wie z. B. das Planen von Erinnerungs-E-Mails oder das Senden einer Nachricht an den Kunden auf Slack.
Checkliste: Absicherung von Webhook-Implementierungen
1. Abwehr von SSRF-Angriffen
Bei dieser Art von Angriff versucht der Angreifer, Informationen (z. B. Instanz-Metadaten in einer Cloud) durch Ausnutzung der Webhook-Funktion zu erhalten. Um dem entgegenzuwirken, sollten Sie die folgenden Maßnahmen ergreifen.
✅ Nutzereingaben validieren
- Einfach: Führen Sie eine einfache URL-Validierung durch.
- Besser: Stellen Sie sicher, dass die URL mit „https://“ beginnt, verbieten Sie „file://“ und andere Nicht-HTTPS-Schemata.
✅ Lokale Adressen einschränken
- Typische lokale IPs blockieren: 127.0.x, 192.168.x, 172.x.
- Verbieten Sie „localhost“ und „http://“
✅ Protokollexposition begrenzen
- Zeigen Sie nur HTTP-Statuscodes in benutzerorientierten Logs an.
- Vermeiden Sie die Anzeige von Headern oder Body-Inhalten.
✅ Erweitert: Erweiterte URL-Validierung
- Einen spezifischen Response-Header für POST-Requests anfordern, der kundenspezifisch ist.
- Diese Verifizierung kontinuierlich aufrechterhalten, auch nach der Ersteinrichtung, um DNS-Änderungen entgegenzuwirken.

2. Ermöglichen Sie Ihren Benutzern, die Datenauthentizität zu überprüfen.
Ihr Webhook-Consumer muss eine Möglichkeit haben zu erkennen, dass die Daten wirklich von Ihrer App stammen. Sie können eine der folgenden Methoden verwenden.
✅ Verifizierung von Testnachrichten
Zuerst ermöglichen Sie Benutzern, eine Testnachricht auszulösen, um Sicherheitsmechanismen zu testen.
✅ HMAC-Verifizierungs-Hash
Einer der effektivsten Sicherheitsmechanismen für Webhook-Funktionalitäten ist die Implementierung von HMAC für Datenintegrität und -authentizität.
Der grundlegende Prozess lässt sich wie folgt zusammenfassen:
- Erzeugen Sie einen Hash der Payload mithilfe von SHA-256 und einem geheimen Schlüssel.
- Senden Sie den HMAC mit dem Payload.
- Empfänger erstellen den Hash neu, um die Authentizität und Integrität der Payload zu überprüfen.
✅ Einbeziehung von Zeitstempeln
Dies ist eher eine fortgeschrittene Sicherheitsmaßnahme. Fügen Sie dem Payload einen Zeitstempel hinzu, um Replay-Angriffe zu verhindern. Stellt sicher, dass Nachrichten nicht wiederverwendet oder verändert werden.
✅ Client-seitige TLS-Zertifikate
Authentifizieren Sie HTTP-Aufrufe mit clientseitigen TLS-Zertifikaten. Dies ist besonders attraktiv für Enterprise-Kunden.
3. Ratenbegrenzung und Vermeidung von Datenüberbelichtung
Für die Webhook-Sicherheit ist das Senden von zu wenig Daten sicherer, als zu viele anzuhängen. Obwohl Webhook-Callbacks mittels HTTPS verschlüsselt sein sollten, kann man nie wissen, wer nach einigen Jahren die Kontrolle über einen Domainnamen haben könnte.
✅ Datenexposition minimieren
- Vermeiden Sie das Senden von personenbezogenen Daten (PII) oder sensiblen Daten.
- Anstatt mehrere Datenpunkte (wie contact_id, E-Mail, Name) zu senden, senden Sie nur die contact_id. Lassen Sie Benutzer bei Bedarf zusätzliche Daten über Ihre öffentliche API abrufen.
✅ Kommunikation der Wiederholungsrichtlinie
- Kommunizieren Sie die Wiederholungsrichtlinie und Ratenbegrenzungen klar an die Nutzenden.
- Informieren Sie sie darüber, dass Nachrichten aufgrund von Wiederholungsversuchen möglicherweise in falscher Reihenfolge ankommen können.
- Definieren Sie, dass jede 2xx-Antwort ein Erfolg ist; andere Antworten sollten einen erneuten Versuch auslösen.
✅ Verwendung eines Warteschlangensystems für die Zustellung
Implementieren Sie ein Warteschlangensystem, um die Webhook-Zustellung zu verwalten und die Ausgabe zu drosseln. Dieser Ansatz hilft, eine versehentliche Überlastung der Server Ihrer Benutzer in Edge Cases zu verhindern, wie z. B. ein großer CSV-Import, der übermäßige Webhook-Aufrufe und Wiederholungsversuche auslöst.
4. Bonus: Anomalie-Benachrichtigung
Dies dient eher der Bequemlichkeit der Entwickelnden als der Sicherheit, aber es ist dennoch eine gute Sache, dies zu implementieren.
- Benutzer benachrichtigen, wenn 4xx- und 5xx-Antworten auftreten
- Benachrichtigungen senden, um Benutzer über etwaige Fehler zu informieren
Diese Ergänzung verbessert die Transparenz und Reaktionsfähigkeit in Ihrem Webhook-System.
Fazit
Das war's! Wir haben einige Schritte behandelt, um Ihre Webhooks nicht nur funktional, sondern auch sicher und benutzerfreundlich zu gestalten. Die Implementierung dieser Schritte schützt Ihre App und verbessert zudem das gesamte Nutzererlebnis. Frohes Coden! 🚀🔒👨💻
Aikido Security ist eine entwickelndenorientierte Software-Sicherheitsplattform. Wir helfen Ihnen, Ihr Produkt sicher zu halten, damit Sie sich auf das Schreiben von Code konzentrieren können. Sie müssen nicht mit einem Vertriebsteam sprechen – verbinden Sie einfach Ihr GitHub-, GitLab-, Bitbucket- oder Azure DevOps-Konto, um Ihre Repos kostenlos zu scannen.
Sichern Sie Ihre Software jetzt.


.jpg)
.avif)
