src/EventSubscriber/XSSProtector.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Twig\NonceGenerator;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. class XSSProtector implements EventSubscriberInterface
  8. {
  9.     /** @var NonceGenerator $nonceGenerator */
  10.     private $nonceGenerator;
  11.     public function __construct(NonceGenerator $nonceGenerator)
  12.     {
  13.         // inject the nonce generator service we created in previous steps
  14.         $this->nonceGenerator $nonceGenerator;
  15.     }
  16.     /**
  17.      * @return array
  18.      */
  19.     public static function getSubscribedEvents()
  20.     {
  21.         // listen to the kernel.response event
  22.         return [KernelEvents::RESPONSE => 'addCSPHeaderToResponse'];
  23.     }
  24.     /**
  25.      * Adds the Content Security Policy header.
  26.      *
  27.      * @param ResponseEvent $event
  28.      */
  29.     public function addCSPHeaderToResponse(ResponseEvent $event)
  30.     {
  31.         // get the Response object from the event
  32.         $response $event->getResponse();
  33.         // create a CSP rule, using the nonce generator service
  34.         $nonce $this->nonceGenerator->getNonce();
  35.         $cspHeader "script-src 'nonce-" $nonce "' 'unsafe-eval' 'strict-dynamic' https: http:;";
  36.         // set CPS header on the response object
  37.         $response->headers->set("Content-Security-Policy"$cspHeader);
  38.         $response->headers->set("X-Content-Type-Options"'nosniff');
  39.     }
  40. }