Headers de sécurité manquants
Six headers HTTP forment la première ligne de défense d'un site contre des attaques courantes côté navigateur. Aucun n'est activé par défaut sur la plupart des frameworks — il faut les ajouter explicitement.
Content-Security-Policy (CSP)
Restreint les sources autorisées à charger des scripts, styles, images, etc. Sans CSP, une injection de script (XSS) réussie peut exécuter n'importe quel code dans le navigateur des visiteurs.
Content-Security-Policy: default-src 'self'; script-src 'self'Strict-Transport-Security (HSTS)
Force le navigateur à toujours utiliser HTTPS pour ton domaine, même si un lien ou un signet pointe vers la version HTTP. Empêche une attaque de downgrade.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadX-Frame-Options
Empêche ton site d'être chargé dans une <iframe> sur un autre domaine — protège contre le clickjacking (faire cliquer un utilisateur sur ton site sans qu'il le sache, caché sous une autre page).
X-Frame-Options: DENYX-Content-Type-Options
Empêche le navigateur de deviner ("sniffer") le type d'un fichier différemment du Content-Type déclaré — un vecteur d'attaque XSS classique quand un fichier uploadé par un utilisateur est réinterprété comme du HTML/JS.
X-Content-Type-Options: nosniffReferrer-Policy
Contrôle combien d'informations sur l'URL courante sont envoyées au site de destination quand un visiteur clique sur un lien sortant — évite de fuiter des paramètres sensibles dans l'URL.
Referrer-Policy: strict-origin-when-cross-originPermissions-Policy
Désactive explicitement les APIs navigateur sensibles (caméra, micro, géolocalisation) que ton site n'utilise pas — réduit ce qu'un script tiers compromis pourrait faire.
Permissions-Policy: camera=(), microphone=(), geolocation=()Les ajouter sur Next.js
Tous en une fois, dans next.config.js :
async headers() {
return [
{
source: '/:path*',
headers: [
{ key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self'" },
{ key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' },
{ 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=()' },
],
},
];
}Vérifie si ton site est concerné par cette faille.
Scanner mon app