headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains', true); // Empêche le navigateur de "deviner" le type MIME d'une ressource (protection contre le MIME sniffing). $response->headers->set('X-Content-Type-Options', 'nosniff', true); // Interdit l'affichage du site dans une iframe externe (protection contre le clickjacking). $response->headers->set('X-Frame-Options', 'SAMEORIGIN', true); // Ancienne protection XSS des navigateurs (conservée pour les navigateurs anciens). $response->headers->set('X-XSS-Protection', '1; mode=block', true); // Limite les informations de provenance envoyées aux sites tiers. $response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin', true); // Désactive des API sensibles du navigateur non utilisées par l'application (RGPD / vie privée). $response->headers->set('Permissions-Policy', 'geolocation=(), microphone=(), camera=(), payment=()', true); // Content-Security-Policy : réduit fortement le risque d'injection de scripts (XSS). // Politique volontairement compatible avec Laravel/Vite (styles et scripts inline autorisés). // Pour durcir davantage, remplacer 'unsafe-inline' par un système de nonce. // NB : l'application charge Tailwind via CDN (cdn.tailwindcss.com) et // les avatars via ui-avatars.com : ces sources externes sont donc autorisées. $response->headers->set('Content-Security-Policy', implode('; ', [ "default-src 'self'", "script-src 'self' 'unsafe-inline' https://cdn.tailwindcss.com", "style-src 'self' 'unsafe-inline' https://cdn.tailwindcss.com", "img-src 'self' data: https:", "font-src 'self' data:", "connect-src 'self'", "object-src 'none'", "base-uri 'self'", "frame-ancestors 'self'", ]), true); return $response; } }