Fix CSP 'Refused to execute inline script because it violates Content Security Policy'
Resolve Content Security Policy inline script blocks using nonces or SHA-256 hashes.
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash, or a nonce is required.
# Next.js Middleware with Cryptographic Nonce:
import { NextResponse } from 'next/server';
export function middleware(request: Request) {
const nonce = Buffer.from(crypto.randomUUID()).toString('base64');
const cspHeader = `
default-src 'self';
script-src 'self' 'nonce-${nonce}' 'strict-dynamic' https://www.google-analytics.com;
style-src 'self' 'unsafe-inline';
img-src 'self' blob: data:;
font-src 'self';
object-src 'none';
base-uri 'self';
form-action 'self';
frame-ancestors 'none';
`.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;
}Root Cause & Mechanism Analysis
Why does this error occur?
The browser's Content Security Policy HTTP header forbids executing inline `<script>` tags or inline `onclick` handlers without a cryptographic nonce or SHA hash.
Frequently Asked Questions
Is 'unsafe-inline' secure?
Related Developer Error Solutions
Browse All 35 GuidesCORS 'Access-Control-Allow-Origin' Missing
Resolve browser cross-origin resource sharing errors by configuring backend HTTP headers and handling preflight OPTIONS requests.
Next.js Hydration Failed
Resolve Next.js React hydration mismatch errors caused by browser-only APIs (window, localStorage), timestamps, or invalid HTML nesting.
JWT Malformed / TokenExpiredError
Handle authorization header parsing, Bearer prefix stripping, and token expiration gracefully.