javascript / expert
Snippet
Verhinderung von Timing-Angriffen mit crypto.timingSafeEqual in Node.js
Standard-Stringvergleiche mittels '===' brechen beim ersten nicht übereinstimmenden Byte vorzeitig ab, was Timing-Seitenkanäle erzeugt, die Angreifer ausnutzen können. Die Funktion crypto.timingSafeEqual führt den Vergleich in konstanter Zeit aus, wodurch geheime Tokens und HMAC-Digests geschützt bleiben.
snippet.js
javascript
1
2
3
4
5
6
7
8
import crypto from 'node:crypto';export function verifySignature(payload, signature, secret) {const hmac = crypto.createHmac('sha256', secret).update(payload).digest();const expectedSig = Buffer.from(signature, 'hex');if (hmac.length !== expectedSig.length) return false;return crypto.timingSafeEqual(hmac, expectedSig);}
nodejs
Erklärung
1
import crypto from 'node:crypto';
Importiert das native Node.js-Kryptographie-Modul.
2
const hmac = crypto.createHmac('sha256', secret).update(payload).digest();
Berechnet einen SHA-256 HMAC Digest aus den Eingabedaten.
3
if (hmac.length !== expectedSig.length) return false;
Stellt sicher, dass die Puffer die gleiche Byte-Länge vor dem Vergleich haben.
4
return crypto.timingSafeEqual(hmac, expectedSig);
Vergleicht Byte-Arrays in konstanter Zeit zur Vermeidung von Seitenkanal-Timing-Angriffen.