Ein Webhook ist die Art und Weise, wie ein externer Dienst Ereignisse an Ihren Server sendet. Da jedoch jeder Anfragen an diese URL schicken kann, müssen Sie überprüfen, ob eine erhaltene Anfrage wirklich von diesem Dienst stammt. Das dafür übliche Standardverfahren ist die HMAC-Signatur.
Die sendende und die empfangende Seite teilen sich einen geheimen Schlüssel. Die sendende Seite hasht den Anfragetext mit dem Schlüssel per HMAC-SHA256, legt die Signatur in einen Header und schickt sie mit. Die empfangende Seite hasht denselben Text mit demselben Schlüssel und vergleicht, ob beide Signaturen übereinstimmen.
Bei Übereinstimmung sind zwei Dinge zugleich gewährleistet. Da nur wer den Schlüssel besitzt eine gültige Signatur erzeugen kann, ist die Echtheit bestätigt; und da sich die Signatur bei der geringsten Änderung des Texts ändert, ist die Integrität bestätigt. Die meisten Webhooks von GitHub, Stripe, Slack und anderen nutzen dieses Verfahren.
Sie können es direkt in AG HASH ausprobieren. Aktivieren Sie die HMAC-Option, geben Sie den geteilten Schlüssel ein und fügen Sie den Anfragetext ein – dann erhalten Sie den HMAC-SHA256-Wert. Diesen vergleichen Sie mit der Signatur im Anfrage-Header. Bei einer echten Verifizierung empfiehlt sich ein Vergleich in konstanter Zeit, um Timing-Angriffe zu vermeiden.