|
1 | 1 | /** @type {import('next').NextConfig} */ |
2 | 2 | const isProd = process.env.NODE_ENV === 'production'; |
3 | 3 |
|
| 4 | +const cspScriptSources = [ |
| 5 | + "'self'", |
| 6 | + "'unsafe-inline'", |
| 7 | + ...(isProd ? [] : ["'unsafe-eval'"]), |
| 8 | + 'https://vercel.live', |
| 9 | + 'https://vitals.vercel-insights.com', |
| 10 | + 'https://va.vercel-scripts.com', |
| 11 | + 'https://www.googletagmanager.com', |
| 12 | + 'https://www.google-analytics.com', |
| 13 | + 'https://fonts.googleapis.com', |
| 14 | + 'https://www.sortvision.com', |
| 15 | +]; |
| 16 | + |
| 17 | +const contentSecurityPolicy = [ |
| 18 | + "default-src 'self'", |
| 19 | + `script-src ${cspScriptSources.join(' ')}`, |
| 20 | + "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.sortvision.com", |
| 21 | + "style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.sortvision.com", |
| 22 | + `script-src-elem ${cspScriptSources.join(' ')}`, |
| 23 | + "font-src 'self' https://fonts.gstatic.com data:", |
| 24 | + "img-src 'self' data: https: blob:", |
| 25 | + "media-src 'self' data: blob:", |
| 26 | + "connect-src 'self' https: data: blob:", |
| 27 | + "frame-src 'none'", |
| 28 | + "object-src 'none'", |
| 29 | + "base-uri 'self'", |
| 30 | + "form-action 'self'", |
| 31 | + "frame-ancestors 'none'", |
| 32 | + "worker-src 'self' blob:", |
| 33 | +].join('; '); |
| 34 | + |
4 | 35 | const nextConfig = { |
5 | 36 | // Next.js 16 - Use App Router (default) |
6 | 37 | // output: 'export', // Removed for SSR/SSG support |
@@ -81,7 +112,7 @@ const nextConfig = { |
81 | 112 | }, |
82 | 113 | { |
83 | 114 | key: 'Content-Security-Policy', |
84 | | - value: "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://vercel.live https://vitals.vercel-insights.com https://va.vercel-scripts.com https://www.googletagmanager.com https://www.google-analytics.com https://fonts.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.sortvision.com; style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.sortvision.com; script-src-elem 'self' 'unsafe-inline' 'unsafe-eval' https://vercel.live https://vitals.vercel-insights.com https://va.vercel-scripts.com https://www.googletagmanager.com https://www.google-analytics.com https://fonts.googleapis.com https://www.sortvision.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https: blob:; media-src 'self' data: blob:; connect-src 'self' https: data: blob:; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; worker-src 'self' blob:;", |
| 115 | + value: contentSecurityPolicy, |
85 | 116 | }, |
86 | 117 | ], |
87 | 118 | }; |
|
0 commit comments