From 5d234b30d60f6032a925ab4aa76b635716d05cfb Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Sun, 22 Feb 2026 19:55:52 +0100 Subject: [PATCH] feat: implement security headers for enhanced protection against clickjacking, MIME-sniffing, and other vulnerabilities --- CHANGELOG.md | 1 + next.config.ts | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 498c533..c924330 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - **Link previews for public dashboards.** Sharing a public dashboard link on social media now shows a proper preview with the site name and description. - **Faster login redirects.** If you're not signed in and try to open a dashboard or settings page, you're redirected to login immediately instead of seeing a blank page first. Already-signed-in users who visit the login page are sent straight to the dashboard. - **Graceful error recovery.** If a page crashes, you now see a friendly error screen with a "Try again" button instead of a blank white page. Each section of the app has its own error message so you know exactly what went wrong. +- **Security headers.** All pages now include clickjacking protection, MIME-sniffing prevention, a strict referrer policy, and HSTS. Browser APIs like camera and microphone are explicitly disabled. ## [0.10.0-alpha] - 2026-02-21 diff --git a/next.config.ts b/next.config.ts index 484ecc8..57533fe 100644 --- a/next.config.ts +++ b/next.config.ts @@ -21,6 +21,27 @@ const nextConfig: NextConfig = { }, ], }, + async headers() { + return [ + { + source: '/(.*)', + headers: [ + { key: 'X-Frame-Options', value: 'DENY' }, + { key: 'X-Content-Type-Options', value: 'nosniff' }, + { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }, + { + key: 'Permissions-Policy', + value: 'camera=(), microphone=(), geolocation=(), interest-cohort=()', + }, + { key: 'X-XSS-Protection', value: '1; mode=block' }, + { + key: 'Strict-Transport-Security', + value: 'max-age=63072000; includeSubDomains; preload', + }, + ], + }, + ] + }, async redirects() { return [ {