Skip to main content
Cloud & Security · Developer Error Resolution Lab

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.

Triggered Error Message:

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.

Customize Solution for Your Environment
# 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?
No. 'unsafe-inline' disables CSP protection against Cross-Site Scripting (XSS). Always prefer nonces or sha256 hashes.
Browse All 35 Guides