HMAC-Webhook-Signatur prüfen: so geht es richtig
Was HMAC tatsächlich beweist
Das genaue Schema, das Olmira verwendet
X-Aether-Signature, X-Aether-Webhook-Id und X-Aether-Event. (Das Header-Präfix lautet Aether statt Olmira – ein Überbleibsel des internen Codenamens der Plattform; das ändert nichts an der Funktionsweise des Verfahrens, nur daran, wie der Header wörtlich heißt.)Eine Zustellung verifizieren, ganz einfach erklärt
crypto-Modul deckt das alles ohne eine einzige Abhängigkeit ab; die Vorabprüfungen unten sind die Stelle, an der sich korrekte Implementierungen tatsächlich von fehlerhaften unterscheiden.Die Fehler, an denen die Verifizierung scheitert
. — ist die zweithäufigste, und sie passiert leicht, weil der Body das „naheliegendere“ zu Hashende ist.Bevor Sie ihm im Produktivbetrieb vertrauen
Prüfen Sie zuerst das Zeitstempel-Fenster
Weisen Sie alles ab, was außerhalb einer kleinen Toleranz liegt (Olmira nennt 300 Sekunden, also fünf Minuten, als eigenen Referenzwert), bevor Sie CPU-Zeit fürs Hashen aufwenden — eine veraltete Signatur verdient den Vergleich nicht.
In konstanter Zeit vergleichen
Verwenden Sie die Vergleichsprimitive Ihrer Sprache mit konstanter Laufzeit statt eines einfachen Gleichheitsvergleichs, damit eine Abweichung nie über die Laufzeit verrät, wie nah ein Versuch war.
Stellen Sie sicher, dass Sie den rohen Request-Body hashen
Protokollieren Sie während der Einrichtung mindestens einmal genau die Zeichenkette, die Ihr Code hashen will, und vergleichen Sie sie Byte für Byte mit dem, was eine Testzustellung tatsächlich gesendet hat.
Planen Sie den Wechsel des Secrets ein
Wo auch immer Sie das Secret speichern: Machen Sie daraus eine einzeilige Konfigurationsänderung — wer es im Dashboard rotiert, ohne es im selben Moment zu aktualisieren, sorgt dafür, dass jede Zustellung fehlschlägt, bis er nachzieht.
Wie Olmira das löst
Weiterführende Artikel
Datenfehler beim CSV-Import — und die Lösung — dieselbe Disziplin „explizit verifizieren, nicht stillschweigend vertrauen“, angewendet auf die Daten, die in die andere Richtung fließen.
Ihr Unternehmen von Tabellenkalkulationen befreien: eine praktische Übersicht — woher importierte Daten überhaupt meistens stammen.
Quell-IPs verschieben sich — hinter Load Balancern, durch Infrastrukturänderungen des Anbieters, im Lauf der Zeit — und sie auf eine Positivliste zu setzen ist in der Praxis brüchig. Eine kryptografische Signatur belegt die Echtheit unabhängig vom Netzwerkpfad, und das ist eine stärkere und stabilere Garantie als „die Anfrage kam aus einem Bereich, den wir heute erkannt haben“.
Nein — das Verfahren ist überall identisch. Pro Endpunkt unterscheidet sich nur das Secret selbst, da jedes unabhängig erzeugt wird.
Nein — prüfen Sie die Signatur, bestätigen Sie schnell und erledigen Sie alles Langsame (Datenbankschreibvorgänge, Aufrufe anderer Systeme) danach asynchron. Ein Webhook-Absender, bei dem das Warten auf Ihren Endpunkt in eine Zeitüberschreitung läuft, wertet das in der Regel als Fehlschlag und versucht es erneut — und das wollen Sie nicht auslösen, weil Sie langsam waren statt tatsächlich gescheitert.
Weisen Sie die Anfrage ab, bevor Sie irgendetwas anderes verarbeiten – eine 4xx-Antwort und sonst nichts. Beschreiben Sie im Antwortkörper nicht, warum sie fehlgeschlagen ist; wer Ihren Endpunkt abklopft, sollte keine kostenlose Rückmeldung darüber bekommen, welcher Teil einer gefälschten Signatur falsch war.