Webhook-Signatur mit HMAC sicher prüfen
Nennen Sie den HMAC-Algorithmus, etwa HMAC-SHA256, und den Header mit der Signatur, und Sie erhalten 8 geordnete Schritte: Rohinhalt bewahren, signierte Nachricht nachbauen, in konstanter Zeit vergleichen und Wiederholungen abweisen. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Nutzen Sie das Ergebnis zur Implementierung oder Kontrolle und gleichen Sie Zeitformat, Kodierung und Replay-Toleranz mit der Anbieterdokumentation ab.
Was eine HMAC-Signatur beweist
Der Absender berechnet mit einem gemeinsamen Geheimnis einen HMAC über die exakten Bytes der Nachricht und legt das Ergebnis in einen Header. Beim Empfang rechnet Ihr System dasselbe nach: Es nimmt den Rohinhalt genau so, wie er angekommen ist, ergänzt den Zeitstempel oder das Präfix, das der Anbieter verlangt, wendet den angegebenen Algorithmus an und kodiert das Ergebnis wie dokumentiert, meist hexadezimal oder als Base64. Stimmen beide Signaturen überein, hat jemand mit dem Geheimnis diese Nachricht erzeugt. Das beweist weder, dass sie aktuell ist, noch, dass sie nicht schon verarbeitet wurde; deshalb folgen das Toleranzfenster für den Zeitstempel und das Speichern bereits angenommener Ereigniskennungen.
Typische Fehler und wann die Schritte helfen
Der häufigste Fehler passiert vor der Berechnung: Das System liest und ordnet den Inhalt neu, ändert Leerzeichen, Reihenfolge oder Zeilenenden, und die richtige Signatur passt nicht mehr. Ebenso typisch sind ein leerer oder doppelter Header, der trotzdem akzeptiert wird, ein gewöhnlicher Textvergleich und das Kürzen oder Auffüllen ungleich langer Werte, statt sie abzulehnen. Nutzen Sie die Schritte, wenn Sie einen Empfänger bauen oder prüfen und einen Prüfplan mit veränderten Inhalten, abgelaufenen Zeitstempeln, falschen Geheimnissen und wiederholten Ereignissen aufstellen. Für das Header-Format bleibt die Dokumentation des Anbieters maßgeblich.
Beginnen Sie mit den signierten Bytes
Bewahren Sie vor dem Parsen exakt die empfangenen Bytes auf. Lesen Sie den genannten Header ohne Beachtung der Großschreibung seines Namens, prüfen Sie seinen Wert jedoch streng. Folgen Sie der dokumentierten Grammatik, lehnen Sie fehlende, leere, doppelte oder fehlerhafte Werte ab und speichern Sie das Geheimnis ausschließlich geschützt.
Rekonstruieren, berechnen und vergleichen Sie korrekt
Rekonstruieren Sie die signierte Nachricht exakt: nur den Roh-Body oder Zeitstempel, Trennzeichen und Body. Beachten Sie Reihenfolge und Kodierung. Berechnen Sie HMAC mit Geheimnis und normalisiertem Algorithmus und kodieren Sie das Ergebnis wie vorgeschrieben.
Dekodieren Sie beide Signaturen in gleich lange Bytefolgen und vergleichen Sie diese in konstanter Zeit. Ungültige Kodierung oder abweichende Länge bedeutet Ablehnung.
Betrachten Sie Kryptografie als Teil der Annahme
Ein passendes HMAC belegt Kenntnis des Geheimnisses, aber weder Aktualität noch Einmaligkeit. Erzwingen Sie das empfohlene Zeitfenster, speichern Sie angenommene Ereignis-IDs und verarbeiten Sie idempotent. Rotieren Sie Geheimnisse mit der dokumentierten Überlappung.
Lehnen Sie vor dem Einreihen ab, antworten Sie allgemein und protokollieren Sie nur sichere Codes. Testen Sie veränderte Bodys, alte Zeitstempel, ungültige Header, falsche Geheimnisse und Replays.
Anwendungsfälle
Bestehende Integration prüfen
Kontrollieren Sie die Reihenfolge von Erfassung, HMAC, sicherem Vergleich und Replay-Schutz.
Sicherheitstests vorbereiten
Leiten Sie Negativtests für fehlende Header, veränderte Bodys, ungültige Signaturen, alte Zeitstempel und Replays ab.
Häufige Fragen
Welche Algorithmen werden erkannt?
HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 und HMAC-SHA512. Andere Algorithmen führen zu einem Eingabefehler.
Warum muss der Roh-Body erhalten bleiben?
Parsen und erneutes Serialisieren kann die Bytes ändern und eine gültige Signatur entwerten.
Verhindert ein gültiges HMAC Replay-Angriffe?
Nein. Prüfen Sie signierte Zeitstempel und deduplizieren Sie vorhandene Ereignis-IDs.
Warum muss die Signatur in konstanter Zeit verglichen werden?
Weil ein gewöhnlicher Vergleich über die Antwortzeit verraten kann, wie viel der Signatur übereinstimmte. Wandeln Sie beide Werte in gleich lange Bytefolgen um und nutzen Sie einen zeitsicheren Vergleich; abweichende Länge oder Dekodierung gilt als fehlgeschlagene Prüfung.
Muss ich mein Geheimnis oder die empfangene Nachricht eingeben?
Nein. Die Schrittliste braucht nur den HMAC-Algorithmus und den Namen des Signatur-Headers; Geheimnis, Nachricht und Signatur bleiben in Ihrem eigenen Empfänger.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/security/webhook-signature-verify-steps \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"algorithm":"HMAC-SHA256","header_name":"X-Webhook-Signature"}'const res = await fetch("https://api.kit.forhosting.com/security/webhook-signature-verify-steps", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"algorithm": "HMAC-SHA256",
"header_name": "X-Webhook-Signature"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/webhook-signature-verify-steps",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"algorithm": "HMAC-SHA256",
"header_name": "X-Webhook-Signature"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/webhook-signature-verify-steps", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"algorithm":"HMAC-SHA256","header_name":"X-Webhook-Signature"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"algorithm":"HMAC-SHA256","header_name":"X-Webhook-Signature"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/webhook-signature-verify-steps", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"algorithm": "HMAC-SHA256",
"header_name": "X-Webhook-Signature"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.webhook_signature_verify_steps",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Die Prüfung von Webhook-Signaturen scheitert häufig an Schnittstellen: Das Framework verändert den Body, der Header wird zu großzügig ausgewertet oder ein gewöhnlicher Vergleich verrät Zeitinformationen. Diese Funktion wandelt den HMAC-Algorithmus und Header des Anbieters in eine präzise, geordnete Prüfliste um. Payload, Geheimnis und Signatur werden nicht benötigt.
Beginnen Sie mit den signierten Bytes
Erneutes Serialisieren von JSON kann Leerraum, Reihenfolge, Escapes, Unicode oder Zeilenenden verändern.
Integrationsbeispiele
Neuen Webhook-Endpunkt umsetzen
Wandeln Sie Algorithmus und Header vor der Programmierung in eine prüfbare Liste um.
Technische Fragen
Prüft dieses Werkzeug einen echten Webhook?
Nein. Es erzeugt Umsetzungsschritte und fragt nie nach Payload, Geheimnis oder Signatur.
Soll ich das Webhook-Geheimnis übermitteln?
Nein. Nur Algorithmus und Header sind nötig; bewahren Sie das Geheimnis geschützt auf.
Was kostet eine API-Anfrage?
Jede Anfrage kostet $0.002. Die deterministische Browser-Ausführung übermittelt keine Geheimnisse.