src/Web/Listener/EasyAdminRefererListener.php line 21

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace SpringerNature\CPS\AMEDReviewTracker\Web\Listener;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. /**
  6.  * Kernel Listener that removes the Easy Admin 'referer' parameter if it is not a valid Easy Admin path.
  7.  * The `referer` parameter is vulnerable to XSS injection.
  8.  *
  9.  * Note: This is not meant as a permanent solution, rather serves as a stopgap.
  10.  */
  11. class EasyAdminRefererListener
  12. {
  13.     public const HTTP_PARAMETER_REFERER 'referer';
  14.     private const EASY_ADMIN_ROOT_PATH '/admin/management/';
  15.     public function onKernelRequest(RequestEvent $e): void
  16.     {
  17.         if ($e->getRequest()->query->has(self::HTTP_PARAMETER_REFERER)) {
  18.             $referer urldecode($e->getRequest()->query->get(self::HTTP_PARAMETER_REFERER));
  19.             if ((!== strpos($refererself::EASY_ADMIN_ROOT_PATH)) || filter_var($refererFILTER_VALIDATE_URL)) {
  20.                 $e->getRequest()->query->remove(self::HTTP_PARAMETER_REFERER);
  21.                 return;
  22.             }
  23.             $e->getRequest()->query->set(self::HTTP_PARAMETER_REFERERfilter_var($refererFILTER_SANITIZE_ENCODED));
  24.         }
  25.     }
  26. }