CSP ou Content-Security-Policy : Retour sur un basique de la sécurité des navigateurs

Savez-vous sécuriser le contenu de votre site web ?

cybersécurité

Publier un site à partir d’un CMS type WordPress, Drupal ou Joomla! est une solution rapide et efficace pour assurer une présence sur internet (site vitrine, lancement d’un produit …). D’ailleurs, nombre d’hébergeurs proposent aujourd’hui des solutions clés en main où il ne reste plus qu’à mettre en place sa charte graphique et un peu de contenu pour se lancer.
Cependant, l’actualité ne cesse de nous rappeler à quel point il faut être vigilant si l’auteur du site ne veut pas voir sa promotion tourner au fiasco :

Qu’est ce que le CSP ou le « Content Security Policy »

Introduction au concept

Le CSP ou Content-Security-Policy (Politique de Sécurité de Contenu en français) est un mécanisme qui va permettre de contrôler, d’autoriser ou d’interdire le contenu d’un site web en fonction de l’origine du contenu.

Le premier principe de cette politique est le principe de la politique de la même source : Tout ce qui provient du site qui est adressé par le navigateur est réputé fiable.

Dans la théorie, cela peut paraître simple …  Par exemple, si la page appelée est http://www.monsite.com/accueil/page1.html

Raison Résultat Raison
http://www.monsite.com/accueil/page2.html OK protocole, hôte et port identiques
http://www.monsite.com/cat/page3.html OK protocole, hôte et port identiques
http://username:password@www.monsite.com/accueil/login.html OK protocole, hôte et port identiques
http://www.monsite.com:81/accueil/autre.html KO protocole et hôte mais port différent
https://www.monsite.com/accueil/autre.html KO protocole différent
http://w3.monsite.com/accueil/autre.html KO hôte différent
http://monsite.com/accueil/autre.html ou http://v2.www.monsite.com/accueil/autre.html KO hôte différent

A cela vient s’ajouter le besoin nécessaire et légitime de faire appel à des sources extérieures de plus en plus nombreuses :

  • usage de CDN
  • du contenu embarqué (images, vidéos, …)
  • les réseaux sociaux (twitter, facebook, instagram …)
  • et bien d’autres cas encore !

Les directives de la politique CSP

Pour élaborer une politique de sécurité sur le contenu, il faut s’appuyer sur le mécanisme Content-Security-Policy en lui transmettant les directives que vous souhaitez définir.

Elles sont définies par des mots-clés et vont permettre de définir le champ d’action de la politique.

Les principales sont :

  • default-src : Définit la politique par défaut. C’est la politique qui s’appliquera si aucune autre politique n’est précisée
  • script-src : Définit la politique pour les scripts
  • object-src : Définit la politique pour les objets ( <object>, <embed> et <applet>)
  • style-src : Définit la politique pour vos CSS
  • img-src : Définit la politique pour les images (qu’elles soient dans la page, dans vos fichiers css …)
  • media-src : Définit la politique appliquée aux médias (<audio>,<video>)
  • font-src : Définit la politique appliquée aux polices de caractères
  • connect-src : Définit la politique appliquée aux connexions d’un objet XMLHttpRequest ou d’une WebSocket
  • remote-uri : Définit l’URI qui sera utilisée pour remonter les violations des politiques définies.

La mise en place de ces politiques est relativement simple pour un site basique mais peut devenir très vite un casse tête si les données ou objets proviennent d’une multitude de sites différents et que l’architecture est peu ou pas documentée.

Dans ce cas, pour vous aider à la construction de la politique du site, vous pouvez vous appuyer sur la directive Content-Security-Policy-Report-Only. Elle permet de faire remonter les erreurs dans la console ou sur une URI et vous permet ainsi d’ajuster votre politique.

Pour faire remonter le rapport à une URI, vous utiliserez le mot clé remote-uri.

Quelques outils :

Voici quelques liens qui vous permettront d’aller plus loin :

  • https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/Content-Security-Policy
  • https://csp-evaluator.withgoogle.com/

Vous souhaitez en savoir plus ?


Contactez-nous ici