removeUnwantedHeaders($this->unwantedHeaderList); $response = $next($request); $response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade'); $response->headers->set('X-Content-Type-Options', 'nosniff'); $response->headers->set('X-XSS-Protection', '1; mode=block'); $response->headers->set('X-Frame-Options', 'SAMEORIGIN'); $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains;'); $cspPolicies = [ "default-src 'none';", "manifest-src 'self';", "connect-src " . \implode(' ', [ // * VIMEO 'https://player.vimeo.com', // * MATOMO 'https://yl.s-web.fr', // * RECAPTCHA 'https://www.google.com/recaptcha/', 'https://recaptcha.google.com/recaptcha/', // * OTHERS 'blob:', '\'self\'', ]) . ';', 'img-src ' . implode(" ", [ // * MATOMO 'https://yl.s-web.fr', // * OTHERS '*', 'blob:', 'data:', ]) . ';', "frame-src " . implode(" ", [ // * VIMEO 'https://player.vimeo.com', // * RECAPTCHA 'https://www.google.com/recaptcha/', 'https://recaptcha.google.com/recaptcha/', '\'self\'', ]) . ';', 'font-src ' . implode(" ", [ // * OTHERS '\'self\'', 'data:', ]) . ';', 'style-src ' . implode(" ", [ // * CKEDITOR '\'unsafe-inline\'', // * OTHERS '\'self\'', ]) . ';', 'script-src ' . implode(" ", [ // * MATOMO 'https://yl.s-web.fr', // * RECAPTCHA 'https://www.google.com/recaptcha/', 'https://www.gstatic.com/recaptcha/', // * OTHERS '\'self\'', '\'unsafe-eval\'', ]) . ' ' . $jsDev . ';' ]; $response->headers->set( 'Content-Security-Policy', implode(' ', $cspPolicies) . $reportUri ); $response->headers->set('Feature-Policy', 'fullscreen \'self\';'); return $response; } /** * Remove unwanted headers. * * @param array $headerList * @return void */ private function removeUnwantedHeaders(array $headerList): void { foreach ($headerList as $header) { header_remove($header); } } }