javascript / expert
Snippet
Laufzeitsichere HMAC-Signatur-Verifizierung in Route-Handlern
Schützt Next.js-API-Endpunkte vor Timing-Side-Channel-Angriffen, indem kryptografische HMAC-Signaturen von Nutzdaten mittels des Konstanten-Zeit-Vergleichsalgorithmus von node:crypto verglichen werden.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import crypto from 'node:crypto';export function verifyWebhookSignature(payload, signature, secret) {const hmac = crypto.createHmac('sha256', secret);hmac.update(payload, 'utf8');const expectedSignature = hmac.digest('hex');const trustedBuffer = Buffer.from(expectedSignature, 'utf8');const untrustedBuffer = Buffer.from(signature, 'utf8');if (trustedBuffer.length !== untrustedBuffer.length) {return false;}return crypto.timingSafeEqual(trustedBuffer, untrustedBuffer);}
nextjs
Erklärung
1
const hmac = crypto.createHmac('sha256', secret);
Instanziiert ein HMAC-Objekt mit SHA-256-Digest-Algorithmus und einem geteilten Geheimschlüssel.
2
hmac.update(payload, 'utf8');
Speist die eingehende Raw-Payload-Zeichenkette in die Digest-Berechnung ein.
3
const expectedSignature = hmac.digest('hex');
Schließt die HMAC-Berechnung ab und liefert den erwarteten Hash-Digest als Hexadezimal-String.
4
return crypto.timingSafeEqual(trustedBuffer, untrustedBuffer);
Führt einen Vergleich in konstanter Zeit über Byte-Buffer aus, um Laufzeitanalyse-Schwachstellen zu verhindern.