src/Common/EventListener/ResponseSecurer.php line 15

Open in your IDE?
  1. <?php
  2. namespace Common\EventListener;
  3. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  4. class ResponseSecurer
  5. {
  6.     /**
  7.      * Add some headers to the response to make our application more secure
  8.      * see https://www.owasp.org/index.php/List_of_useful_HTTP_headers
  9.      *
  10.      * @param FilterResponseEvent $event
  11.      */
  12.     public function onKernelResponse(FilterResponseEvent $event): void
  13.     {
  14.         $cacheControl = [
  15.             'max-age=0',
  16.             'must-revalidate',
  17.             'private',
  18.             'no-cache',
  19.         ];
  20.         if (defined('APPLICATION') && APPLICATION === 'Backend') {
  21.             $cacheControl[] = 'no-store';
  22.         }
  23.         $headers = [
  24.             'Cache-Control' => implode(', '$cacheControl),
  25.             'X-Frame-Options' => 'deny',
  26.             'Expires' =>  '0',
  27.             'Pragma' => 'no-cache',
  28.             'referrer' => 'strict-origin-when-cross-origin',
  29.             'Referrer-Policy' => 'strict-origin-when-cross-origin',
  30.             'X-XSS-Protection' => '1; mode=block',
  31.             'X-Content-Type-Options' => 'nosniff',
  32.         ];
  33.         $responseHeaders $event->getResponse()->headers;
  34.         foreach ($headers as $header => $value) {
  35.             if (!$responseHeaders->has($header)) {
  36.                 $responseHeaders->set($header$value);
  37.             }
  38.         }
  39.         // Don't leak server config
  40.         $blockedHeaders = [
  41.             'x-powered-by',
  42.             'Server',
  43.         ];
  44.         foreach ($blockedHeaders as $blockedHeader) {
  45.             if ($responseHeaders->has($blockedHeader)) {
  46.                 $responseHeaders->remove($blockedHeader);
  47.             }
  48.         }
  49.     }
  50. }