javascript / expert
Snippet
Zeitsichere Geheimnisprüfung mit TypedArrays in Edge-Middleware
Standard-String-Vergleiche (`===`) sind anfällig für Timing-Side-Channel-Angriffe, da der Vergleich beim ersten nicht übereinstimmenden Zeichen frühzeitig abbricht. Durch die Kodierung von Signaturen und Secrets in `Uint8Array` TypedArrays gleicher Länge erzwingt `crypto.timingSafeEqual` einen Vergleich mit konstanter Ausführungszeit.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
import { timingSafeEqual } from 'crypto';export function verifyWebhookSignature(payload, signature, secret) {const encoder = new TextEncoder();const a = encoder.encode(signature);const b = encoder.encode(secret);if (a.byteLength !== b.byteLength) {return false;}return timingSafeEqual(a, b);}
nextjs
Erklärung
1
const a = encoder.encode(signature);
Konvertiert String-Parameter in Uint8Array-Puffer für den kryptografischen Vergleich auf Byte-Ebene.
2
return timingSafeEqual(a, b);
Führt einen Vergleich mit konstanter Ausführungszeit auf zwei TypedArrays aus, um Timing-Angriffe zu unterbinden.