Accueil ¦ Blog ! ¦ Perso ¦ Profil pro ¦ Articles ¦ Liens recommandés ¦ Préférences ¦ À propos

J'ai toujours raison ©Mickaël Wolff

À propos des entêtes de sécurité.

Il y a quelques semaines, on m'a fait découvrir quelques champs d'entête pour mieux contrôler ce qu'un navigateur est prêt à utiliser pour faire fonctionner un site qu'il a chargé. Jusque là, je ne connaissais vraiment que les CORS, puisque j'avais bataillé avec les services Web que je fabriquais, étant plutôt un développeur backend.

J'avais mis en place ces champs d'entête sur mon serveur dédié pour pouvoir tester si cela causait plus de problèmes que ça n'en résolvait. Au départ, je n'avais rien observé vu que je ne suis pas un utilisateur intensif de JavaScript, et autres technologies restreintes par de telles politiques de sécurité. Cependant, il a suffi que je m'intéresse à la mise à jour d'un RoundCube que je mets à disposition pour que je m'aperçoive que tout explose !

Pour référence, j'avais appliqué ceci à tout mon Web :

        
          # /etc/apache2/conf-available/headers-security.conf
          # a2enconf headers-security
          Header set Content-Security-Policy "script-src 'self'"
          Header set Permissions-Policy "none"
          Header set Referrer-Policy "no-referrer-when-downgrade"
          Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
          Header set X-Content-Type-Options "nosniff"
          Header set X-Frame-Options "SAMEORIGIN"
          Header set X-Xss-Protection "1; mode=block"
        
      

La valeur d'entête maudite

J'avais mis l'entête Content-Security-Policy (CSP) à la valeur qui suit : "script-src 'self'" Or RoundCube, et en particulier certains thèmes de ce webmail, utilisent du JavaScript pour fonctionner. Les messages n'apparaissaient plus dans les diverses boîtes, et il était impossible de se déconnecter. C'est un peu problématique pour la sécurité des utilisateurs.

Une capture d&pos;écran de RoundCube
RoundCube échouant à déconnecter l'utilisateur, affichant un message d'erreur sur l'impossibilité de faire aboutir une requête.
Une capture d&pos;écran de la console de déboggage de Mozilla Firefox
La console de déverminage de FF listant un certain nombre de ressources que ce navigateur refuse de charger en accord avec la CSP déployée.

La valeur d'entête bénie

Avec pas mal de temps et de lutte, j'ai permis à mon webmail de fonctionner à nouveau, avec l'entête CSP suivant :

        
          # Code inséré dans le VirtualHost du webmail
          Header set Content-Security-Policy " \
              default-src 'self' https://mail.example.com 'unsafe-inline'; \
              script-src 'self' 'unsafe-inline' 'unsafe-eval'; \
              img-src 'self'; \
              object-src 'self'; \
          "
        
      

Ceci semble avoir résolu les problèmes de restriction trop importante. En espérant ne pas avoir ouvert la porte aux attaques et rendu la chose inutile !

Quelques ressources pour aller plus loin :

Haut de la page
0.039s