Next.js security headers config
Copy-paste next.config.mjs with HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy configured correctly for production.
How to use
Drop into next.config.mjs. Adjust Permissions-Policy to reflect features your app actually uses.
Template (tsx)
copy-paste, replace {{PLACEHOLDERS}}/** @type {import('next').NextConfig} */
const securityHeaders = [
{ key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains; preload" },
{ key: "X-Content-Type-Options", value: "nosniff" },
{ key: "X-Frame-Options", value: "SAMEORIGIN" },
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
{
key: "Permissions-Policy",
value:
"accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()",
},
{ key: "Cross-Origin-Opener-Policy", value: "same-origin" },
{ key: "X-DNS-Prefetch-Control", value: "on" },
];
const nextConfig = {
reactStrictMode: true,
poweredByHeader: false,
async headers() {
return [{ source: "/:path*", headers: securityHeaders }];
},
};
export default nextConfig;