Masquer la version du CMS Sulu

vivons heureux, vivons cachés !

C'est quoi Sulu ?

Sulu est à la fois un personnage fictif de la série télévisée Star Trek... et un CMS propulsé par le framework Symfony et couplé avec React au niveau du backend.

Dans ce tutoriel, nous allons nous concentrer sur le CMS Sulu et non sur le personnage fictif.

Un article détaillé sur ce CMS est prévu dans ma liste de tâches, mais en attendant, je vous propose un petit tutoriel pour masquer la version de Sulu qui est visible dans les en-têtes HTTP.

Pourquoi masquer la version d'un CMS ?

Masquer la version d'un CMS est une pratique de sécurité recommandée pour plusieurs raisons.

Rendre publique la version d'un CMS expose potentiellement des informations sensibles aux pirates informatiques, qui pourraient exploiter des vulnérabilités connues de cette version spécifique pour attaquer le site web.

En masquant la version du CMS dans les en-têtes HTTP, vous limitez les informations accessibles aux attaquants et diminuez les risques de cyberattaques ciblées.

Cela constitue une bonne pratique de sécurité pour protéger votre site web et assurer sa stabilité.

Toutefois, il est important de maintenir vos CMS à jour pour garantir une sécurité optimale.

Comment masquer la version de Sulu ?

Par défaut, le CMS affiche la version du CMS et sauf erreur de ma part, il n'y a pas moyen de désactiver ce comportement.

Pour modifier cela, nous allons ajouter un EventSubscriber qui va venir agir sur le HttpKernel de Symfony au niveau de la réponse.

Nous allons créer un répertoire EventSubscriber dans le dossier src et nous allons ajouter le code suivant :

<?php

namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;


class GeneratorEventSubscriber implements EventSubscriberInterface
{

    public static function getSubscribedEvents() {
        $events[KernelEvents::RESPONSE][] = array('RemoveXGenerator', -10);
        return $events;
    }

    public function RemoveXGenerator(ResponseEvent $event) {
        $response = $event->getResponse();
        $response->headers->remove('X-Generator');
    }
    
}

Comment pouvons-nous vérifier que notre modification fonctionne correctement ?

Dans votre environnement de développement, vous pouvez contrôler la modification apportée à l'interface de votre site en utilisant le profiler de Symfony.

Il vous suffit de cliquer sur le nom de la page dans le profiler, puis dans les détails du profiler, accédez à la section Response sous l'onglet Request / Response.

Vous y trouverez un tableau correspondant à vos en-têtes, comme illustré ci-dessous.