javascript / expert
Snippet
Strict Content Security Policy Nonce-Injektion via Middleware
In modernen Next.js App Router-Anwendungen erfordert die Implementierung einer Strict Content Security Policy (CSP) die Injektion einer eindeutigen kryptografischen Nonce pro Anfrage. Die Edge-Middleware generiert eine Base64-kodierte zufällige UUID-Nonce und leitet diese über benutzerdefinierte Header sowohl an Server-Komponenten als auch an HTTP-Antwort-Header weiter, um Cross-Site-Scripting-Angriffe (XSS) zu verhindern.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { NextResponse } from 'next/server';export function middleware(request) {const nonce = Buffer.from(crypto.randomUUID()).toString('base64');const cspHeader = `default-src 'self';script-src 'self' 'nonce-${nonce}' 'strict-dynamic';object-src 'none';base-uri 'self';`.replace(/\s{2,}/g, ' ').trim();const requestHeaders = new Headers(request.headers);requestHeaders.set('x-nonce', nonce);requestHeaders.set('Content-Security-Policy', cspHeader);const response = NextResponse.next({request: { headers: requestHeaders },});response.headers.set('Content-Security-Policy', cspHeader);return response;}
nextjs
Erklärung
1
const nonce = Buffer.from(crypto.randomUUID()).toString('base64');
Generiert eine kryptografisch sichere zufällige UUID und kodiert sie als Base64-String als Nonce pro Anfrage.
2
requestHeaders.set('x-nonce', nonce);
Leitet die generierte Nonce über Anfrage-Header an Server-Komponenten weiter.