Ersetzen Sie Polling durch signierte Webhooks für Hosting-Ereignisse
Erfahren Sie, wie Sie Polling-Schleifen durch signierte Webhooks für die Hosting-Ereignisautomatisierung ersetzen. Implementieren Sie HMAC-Verifizierung, Zeitstempeltoleranz und Replay-Schutz.
Sie fragen wahrscheinlich alle paar Minuten die API Ihrer Hosting-Plattform ab, um nach neuen Bestellungen, fehlgeschlagenen Zahlungen oder Serverstatusänderungen zu suchen. Diese Schleife verschwendet Ressourcen, erhöht die Latenz und kann Ereignisse zwischen den Überprüfungen verpassen. Signierte Webhooks senden Ereignisse in dem Moment, in dem sie auftreten, an Sie, aber Sie müssen sie verifizieren, um Spoofing und Replay-Angriffe zu vermeiden. Diese Anleitung zeigt Ihnen, wie Sie von Polling auf signierte Webhooks umsteigen, mit HMAC-Verifizierung, Zeitstempeltoleranz und Replay-Schutz.
Warum Polling-Schleifen durch Webhooks ersetzen?
Polling ist ein Pull-Modell: Sie fragen die API wiederholt nach Änderungen. Webhooks sind Push: Die Plattform sendet eine HTTP-POST-Anfrage an Ihren Endpunkt, wenn ein Ereignis auftritt. Jede Minute abzufragen bedeutet 1.440 Anfragen pro Tag pro Endpunkt, von denen die meisten nichts Neues zurückgeben. Webhooks beseitigen diese Verschwendung und reduzieren die Ereignislatenz von Minuten auf Sekunden. Für die Hosting-Automatisierung ist das wichtig, wenn eine neue Bestellung eine sofortige Bereitstellung auslösen soll oder eine fehlgeschlagene Zahlung den Dienst ohne Verzögerung aussetzen soll.
Wie funktionieren signierte Webhooks?
Ein signierter Webhook enthält eine kryptografische Signatur in den Anfrage-Headern, die vom Absender mit einem gemeinsamen Geheimnis generiert wird. Sie verifizieren die Signatur, um zu bestätigen, dass die Nutzlast von der erwarteten Quelle stammt und nicht verändert wurde. Der typische Ablauf:
- Die Plattform erstellt eine JSON-Nutzlast, die das Ereignis beschreibt.
- Sie berechnet einen HMAC (Hash-based Message Authentication Code) unter Verwendung eines geheimen Schlüssels und der Nutzlast.
- Sie sendet die Nutzlast und die Signatur in Headern, oft mit einem Zeitstempel.
- Ihr Endpunkt berechnet den HMAC neu und vergleicht ihn mit der empfangenen Signatur.
- Wenn sie übereinstimmen und der Zeitstempel aktuell ist, verarbeiten Sie das Ereignis.
Dies verhindert, dass Angreifer Ereignisse fälschen oder alte wiedergeben.
Wie man HMAC-Signaturen korrekt verifiziert
Die HMAC-Verifizierung ist unkompliziert, aber leicht falsch zu machen. Verwenden Sie einen zeitkonstanten Vergleich, um Timing-Angriffe zu vermeiden. Hier ist ein schrittweiser Ansatz:
- Extrahieren Sie die Signatur und den Zeitstempel aus den Headern (z. B.
X-SignatureundX-Timestamp). - Rekonstruieren Sie die signierte Zeichenkette. Übliche Muster:
timestamp + '.' + payloadoder nur die Nutzlast. Überprüfen Sie die Dokumentation Ihres Anbieters. - Berechnen Sie den HMAC mit SHA-256 und Ihrem geheimen Schlüssel.
- Vergleichen Sie die berechnete Signatur mit der empfangenen unter Verwendung einer zeitkonstanten Funktion.
- Wenn sie übereinstimmen, fahren Sie mit der Zeitstempelvalidierung fort.
Verwenden Sie niemals einen einfachen Zeichenkettenvergleich; verwenden Sie eine Funktion wie hash_equals() in PHP oder hmac.compare_digest() in Python.
Beispiel: HMAC-Verifizierung in Python
import hmac
import hashlib
def verify_signature(payload, secret, received_signature, timestamp):
signed_payload = f"{timestamp}.{payload}".encode()
expected = hmac.new(secret.encode(), signed_payload, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, received_signature)
Welche Zeitstempeltoleranz sollten Sie verwenden?
Die Zeitstempeltoleranz begrenzt, wie alt eine Anfrage sein darf. Wenn ein Angreifer eine gültige Anfrage abfängt, könnte er sie später wiedergeben. Indem Sie Anfragen mit Zeitstempeln außerhalb eines kleinen Fensters (z. B. 5 Minuten) ablehnen, reduzieren Sie dieses Risiko. Wählen Sie eine Toleranz, die Uhrenversatz und Sicherheit ausbalanciert. Zu eng (z. B. 30 Sekunden) kann zu falschen Ablehnungen führen, wenn Ihre Serveruhr driftet. Zu locker (z. B. 1 Stunde) gibt Angreifern ein größeres Fenster. Eine übliche Wahl ist 5 Minuten. Verwenden Sie immer UTC-Zeitstempel und stellen Sie sicher, dass Ihre Serverzeit über NTP synchronisiert ist.
Wie man Replay-Schutz implementiert
Zeitstempeltoleranz allein reicht nicht aus; ein Angreifer könnte eine Anfrage innerhalb des Toleranzfensters wiedergeben. Um Replay zu verhindern, verfolgen Sie verarbeitete Ereignis-IDs oder Signaturen. Optionen:
- In-Memory-Cache: Speichern Sie aktuelle Ereignis-IDs in einem Set mit einer TTL, die dem Toleranzfenster entspricht. Einfach, aber nicht über mehrere Server hinweg geteilt.
- Datenbank: Fügen Sie Ereignis-IDs in eine Tabelle mit einer eindeutigen Einschränkung ein. Wenn die Einfügung fehlschlägt, ist es ein Replay. Funktioniert über Server hinweg, fügt aber Latenz hinzu.
- Redis: Verwenden Sie ein Redis-Set mit Ablaufzeit. Schnell und geteilt.
Unabhängig von Ihrer Wahl stellen Sie sicher, dass der Speicher atomar ist und Nebenläufigkeit handhabt. Für Hosting-Ereignisse mit hohem Volumen ist Redis gut geeignet.
Best Practices für Webhook-Endpunkte
Ihr Endpunkt muss zuverlässig und sicher sein. Befolgen Sie diese Richtlinien:
- Schnell antworten: Geben Sie innerhalb weniger Sekunden 200 OK zurück. Wenn die Verarbeitung länger dauert, reihen Sie das Ereignis in eine Warteschlange ein und verarbeiten Sie es asynchron.
- HTTPS verwenden: Akzeptieren Sie niemals Webhooks über einfaches HTTP.
- Nutzlaststruktur validieren: Überprüfen Sie auch nach der Signaturverifizierung, ob erforderliche Felder vorhanden sind und die erwarteten Typen haben.
- Fehler protokollieren: Protokollieren Sie Signaturabweichungen und Verarbeitungsfehler zur Fehlerbehebung.
- Wiederholungen handhaben: Webhook-Absender wiederholen oft bei Fehlern. Stellen Sie sicher, dass Ihr Endpunkt idempotent ist.
Alles zusammenfügen
Das Ersetzen von Polling durch signierte Webhooks erfordert drei Sicherheitsschichten: HMAC-Verifizierung, Zeitstempeltoleranz und Replay-Schutz. Implementieren Sie sie sorgfältig, und Sie werden die Last reduzieren, die Latenz verbessern und Ihre Automatisierung sicher halten. Wenn Sie eine Hosting-Automatisierungsplattform aufbauen, ziehen Sie eine Lösung in Betracht, die signierte Webhooks out of the box bietet. Zum Beispiel enthält Teculiar Webhook-Unterstützung mit HMAC-Signaturen als Teil seiner Automatisierungsplattform. Weitere Details finden Sie auch auf unserer Preisseite.
Was als Nächstes zu tun ist
- Überprüfen Sie Ihre aktuellen Polling-Schleifen und identifizieren Sie Ereignisse, die webhook-gesteuert sein könnten.
- Richten Sie einen sicheren Endpunkt mit HMAC-Verifizierung und Zeitstempelprüfungen ein.
- Implementieren Sie Replay-Schutz mit Redis oder einer Datenbank.
- Testen Sie mit dem Webhook-Simulator Ihres Anbieters und überwachen Sie auf Fehler.
Beginnen Sie damit, eine hochfrequente Polling-Schleife durch einen Webhook zu ersetzen, und erweitern Sie dann, sobald Sie Vertrauen gewinnen.