javascript / expert
Snippet
Timing-Angriffssichere HMAC-Webhook-Signaturverifizierung
Standard-String-Vergleichsoperatoren (===) brechen frühzeitig ab, sobald das erste nicht übereinstimmende Zeichen gefunden wird. Dies verrät Angreifern Timing-Informationen beim Fälschen von Webhook-Signaturen. In Node.js vergleicht crypto.timingSafeEqual Puffer in konstanter Zeit und verhindert so kryptografische Timing-Angriffe.
snippet.js
javascript
1
2
3
4
5
6
7
const crypto = require('node:crypto');function verifySignature(payload, signature, secret) {const hmac = crypto.createHmac('sha256', secret).update(payload).digest();const sigBuffer = Buffer.from(signature, 'hex');if (hmac.length !== sigBuffer.length) return false;return crypto.timingSafeEqual(hmac, sigBuffer);}
nodejs
Erklärung
1
const hmac = crypto.createHmac('sha256', secret).update(payload).digest();
Berechnet den erwarteten SHA256 HMAC-Digest-Puffer für die eingehenden Daten.
2
if (hmac.length !== sigBuffer.length) return false;
Überprüft identische Puffenlängen vor dem Ausführen des zeitkonstanten Vergleichs.
3
return crypto.timingSafeEqual(hmac, sigBuffer);
Führt einen zeitkonstanten Vergleich durch, um vor Mikroskunden-Timing-Analysen zu schützen.