src/EventListener/RequestListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  4. class RequestListener
  5. {
  6.     private array $contentSecurityPolicy = [
  7.         'object-src' => '',
  8.         'script-src' => '',
  9.         'form-action' => '',
  10.         'frame-ancestors' => '',
  11.         'connect-src' => '',
  12.         'font-src' => '',
  13.         'frame-src' => '',
  14.         'img-src' => '',
  15.         'media-src' => '',
  16.         'style-src' => '',
  17.     ];
  18.     public function onKernelResponse(ResponseEvent $event): void
  19.     {
  20.         if (!$event->isMainRequest()) {
  21.             return;
  22.         }
  23.         if ('test' !== $_ENV['APP_ENV']) {
  24.             $domains str_replace(';'' '$_ENV['DOMAINS']);
  25.             foreach ($this->contentSecurityPolicy as $key => $value) {
  26.                 $nameInEnv strtoupper(str_replace('-''_'$key));
  27.                 $this->contentSecurityPolicy[$key] = "{$_ENV[$nameInEnv]} {$_ENV['RQST_CTXT_HOST']} {$domains}";
  28.             }
  29.             $event->getResponse()->headers->add([
  30.                 'X-XSS-Protection' => '1; mode=block',
  31.                 'X-Frame-Options' => 'DENY',
  32.                 'X-Content-Type-Options' => 'nosniff',
  33.                 'Content-Security-Policy' => implode('; '$this->contentSecurityPolicy),
  34.                 'Strict-Transport-Security' => 'max-age=63072000; includeSubDomains; preload;',
  35.                 'Permissions-Policy' => 'camera=()',
  36.                 'Referrer-Policy' => 'no-referrer-when-downgrade',
  37.             ]);
  38.         } else {
  39.             $event->getResponse()->headers->add([
  40.                 'X-XSS-Protection' => '1; mode=block',
  41.                 'X-Frame-Options' => 'DENY',
  42.                 'X-Content-Type-Options' => 'nosniff',
  43.                 'Content-Security-Policy' => "object-src 'none'; script-src 'self' 'unsafe-inline' js-agent.newrelic.com code.jquery.com www.nutella.com  static.addtoany.com www.google.com www.gstatic.com ; form-action 'self'; frame-ancestors 'self';",
  44.                 'Strict-Transport-Security' => 'max-age=63072000; includeSubDomains; preload;',
  45.             ]);
  46.         }
  47.     }
  48. }