javascript / expert
Snippet
Integration von Content Security Policy Nonces über die Next.js-Headers-Middleware
Dieses fortgeschrittene Beispiel erzeugt eine kryptografisch sichere zufällige 16-Byte-Nonce in der Next.js-Middleware. Es baut dynamisch einen strikten Content-Security-Policy (CSP) Header auf und leitet die Nonce sowohl an vorgelagerte React Server Components als auch an den HTTP-Client weiter, wobei Fehler bei der Entropie-Erzeugung sauber abgefangen werden.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { NextResponse } from 'next/server';export function middleware(request) {try {const nonce = Buffer.from(crypto.getRandomValues(new Uint8Array(16))).toString('base64');const cspHeader = `default-src 'self'; script-src 'self' 'nonce-${nonce}' 'strict-dynamic';`;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;} catch (error) {throw new Error(`CSP Nonce Generation Failed: ${error.message}`);}}
nextjs
Erklärung
1
const nonce = Buffer.from(crypto.getRandomValues(new Uint8Array(16))).toString('base64');
Erzeugt ein kryptografisch sicheres 16-Byte-Zufalls-Array mittels Web Crypto API und kodiert es nach Base64.
2
const requestHeaders = new Headers(request.headers);
Klont die eingehenden Request-Header, um Änderungen und Header-Injektionen für React Server Components zu ermöglichen.
3
response.headers.set('Content-Security-Policy', cspHeader);
Wendet die finale strikte CSP-Sicherheitsanweisung direkt auf die abgehenden HTTP-Antwort-Header an.