La CSP stricte n'autorise pas l'évaluation non sécurisée
Qu'est-ce que cela signifie ?
La Content Security Policy (CSP) est une politique de sécurité qui indique aux navigateurs quels types de code sont autorisés à s'exécuter sur une page web. La directive unsafe-eval contrôle spécifiquement si du JavaScript peut être généré dynamiquement et exécuté au moment de l'exécution, par exemple via eval() ou le constructeur Function(). Une CSP stricte qui n'autorise pas unsafe-eval bloque précisément ce type d'exécution de code dynamique dans le navigateur. Cela s'applique non seulement au code propre du site web, mais aussi aux outils externes qui rechargent et exécutent du contenu au moment de l'exécution, comme c'est le cas avec les outils d'A/B testing côté client.
La création et la diffusion fonctionnent-elles même sans unsafe-eval ?
Non, techniquement parlant, créer et diffuser des expériences n'est pas possible sans unsafe-eval. La raison réside dans le fonctionnement même du snippet : les expériences ne sont pas intégrées de manière statique lors du déploiement de la page, mais sont récupérées par le snippet sous forme de configuration au moment de l'exécution et exécutées dans le navigateur par un moteur JavaScript. C'est précisément ce qui permet de créer ou de modifier une expérience dans le dashboard sans nécessiter un nouveau déploiement côté client.
Cependant, une CSP ne peut autoriser que du code qu'elle connaît à l'avance, via une source fixe, un hash ou un nonce. Aucune de ces méthodes ne fonctionne pour du contenu qui n'est assemblé qu'après le chargement de la page. Pour que le navigateur exécute quand même ce code, il a besoin de eval() ou du constructeur Function() — précisément ce que contrôle unsafe-eval. Comme la logique de ciblage et les modifications de contenu passent par le même moteur, il n'existe pas de chemin d'exécution distinct et « sûr » qui pourrait être activé uniquement pour des expériences simples (texte, CSS, images).
Solution possible
Plutôt que d'autoriser unsafe-eval sur l'ensemble du site, la CSP peut être configurée différemment pour chaque route. Les pages avec des exigences particulièrement strictes (par exemple les flux de connexion ou d'authentification) restent strictement « eval-free », tandis que unsafe-eval n'est autorisé que sur les pages où des expériences sont réellement destinées à s'exécuter.