src/EventSubscriber/HttpHeadersSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Environment;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. final class HttpHeadersSubscriber implements EventSubscriberInterface
  9. {
  10.     /** @var string */
  11.     private const XSS "1; mode=block";
  12.     /** @var string */
  13.     private const CSP "default-src 'self' 'unsafe-inline' https://fonts.gstatic.com https://cdnjs.cloudflare.com https://fonts.googleapis.com data: 'self' 'unsafe-inline' blob: 'self'";
  14.     /** @var string */
  15.     private const HSTS "max-age=31536000";
  16.     /** @var string */
  17.     private const FRAME "deny";
  18.     /** @var string */
  19.     private const CONTENT_OPT "nosniff";
  20.     public function onKernelResponse(ResponseEvent $event)
  21.     {
  22.         $event->getResponse()->headers->set('X-XSS-Protection'self::XSS);
  23.         $event->getResponse()->headers->set('Content-Security-Policy'self::CSP);
  24.         $event->getResponse()->headers->set('X-Frame-Options'self::FRAME);
  25.         $event->getResponse()->headers->set('X-Content-Type-Options'self::CONTENT_OPT);
  26.         if (!Environment::isProduction()) {
  27.             return;
  28.         }
  29.         $event->getResponse()->headers->set('Strict-Transport-Security'self::HSTS);
  30.     }
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             KernelEvents::RESPONSE => 'onKernelResponse',
  35.         ];
  36.     }
  37. }