Mettre en place l'en-tête Feature-Policy sur son site web

Voilà un sujet que j'avais mis de côté depuis un peu plus d'un an : les en-têtes HTTP permettant d'améliorer quelques peu la sécurité d'un site web, en contrôlant le plus possible son contenu, ses fonctionnalités... Aujourd'hui, je vous propose de découvrir l'en-tête Feature-Policy et bien évidemment de la mettre en oeuvre. Bon, pour (re)situer le contexte, je vous rappelle que j'ai déjà mis en place certains en-têtes ce qui confère à l'heure actuelle à ce site la note de B sur le site SecurityHeaders comme vous pouvez le voir ci-dessous.

Score SecurityHeaders de JusteGeek.fr sans Feature-Policy

Score SecurityHeaders de JusteGeek.fr sans Feature-Policy

 

Qu'est ce que l'en-tête Feature-Policy ?

Cet en-tête a été créé il me semble par Google. Son but est de maîtriser les fonctionnalités des navigateurs qui les prennent en compte. Ainsi, via ces en-têtes, il est possible d'autoriser certaines fonctionnalités et d'en restreindre d'autres, et ce de manière assez granulaire en fonction de leur origine. Et l'idée est intéressante, car cela peut permettre d'éviter que ces fonctionnalités soient exploitées à des fins malicieuses alors même qu'elles ne sont pas nécessaires pour le site web. 

L'en-tête Feature-Policy agit donc sur les différentes fonctions qu'incorporent les navigateurs modernes (Chrome, Safari...). Voici la liste de ces fonctionnalités, au jour de la rédaction de ce billet :

  • accelerometer
  • ambient-light-sensor
  • autoplay 
  • battery 
  • camera
  • display-capture
  • document-domain
  • encrypted-media
  • fullscreen
  • geolocation
  • gyroscope
  • layout-animations
  • legacy-image-formats
  • magnetometer
  • microphone
  • midi
  • notifications
  • oversized-images
  • payment
  • picture-in-picture
  • publickey-credentials-get
  • push
  • speaker
  • sync-xhr
  • usb
  • vibrate
  • vr (encore actif mais déprécié)
  • wake-lock
  • xr-spatial-tracking

Attention, tous les navigateurs ne supportent pas toutes les fonctionnalités ! Cela dépend parfois des versions, etc.

Pour chacune de ces fonctionnalités, la Feature-Policy va permettre un contrôle ciblé : on va en effet pouvoir décider d'autoriser ou non la fonction, et ce, soit de manière générale soit en fonction de la source. Pour cela, il conviendra d'indiquer, pour chaque fonction que l'on souhaite contrôler, l'une des directives suivantes :

  • * pour permettre la fonctionnalité quelle que soit son origine
  • self : pour permettre d'autoriser les fonctionnalités seulement si elles proviennent du même domaine
  • src : permet de définir une source pour laquelle la fonctionnalité est activée
  • none : pour interdire purement et simplement l'utilisation de la fonctionnalité

Pour comprendre mieux comment cela fonctionne, laissez-moi vous donner un exemple :

Feature-Policy: accelerometer 'none'; autoplay 'none'; geolocation 'self'

Via cette politique, on va :

  1. interdire la fonction accelerometer  qui permet au navigateur d'avoir accès à l’accéléromètre.
  2. interdire la fonction autoplay qui permet au navigateur de lire automatiquement les vidéo de la page web.
  3. autoriser la fonction geolocation qui permet l'utilisation de la géolocalisation seulement lorsque la source de la demande est le domaine en question (et pas en provenance de domaines externes)

 

Implémenter l'en-tête Feature-Policy sur son site web

Pour implémenter l'en-tête Feature-Policy, on va pouvoir agir, comme souvent, soit de manière générale sur le serveur web, soit de manière granulaire sur les sites web. Voyons donc rapidement ces deux méthodes.

 

Implémentation générale pour le serveur web

Pour activer cet en-tête de manière globale sur un serveur web de type apache2, il convient d'éditer le fichier  /etc/apache2/conf-available/security.conf et d'y ajouter la Feature-Policy sur une nouvelle ligne comme ceci :

Header set Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'"

Redémarrez ensuite votre serveur apache2 (un reload est peut-être suffisant, mais pour ma part je préfère un restart) :

systemctl restart apache2

Et voilà, vous pouvez maintenant vérifier que tout est fonctionnel en scannant à nouveau votre site web (ou l'un de vos sites web) avec SecurityHeaders.

 

Implémentation au cas par cas pour un site web

Pour une implémentation plus granulaire, il est possible d'utiliser le fichier .htaccess pour mettre en place ce header. Pour cela, il suffit d'ajouter nos directives dans la section mod_headers.c comme ceci :

<IfModule headers_module.c> 
Header set Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'" 
</IfModule>

Il est aussi possible de définir le Feature-Policy via la configuration du vhost, en ajoutant juste avant la balise  </VirtualHost>

<IfModule headers_module> 
Header set Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'" 
</IfModule>

Ensuite, et comme avec la configuration globale, un petit restart du serveur web et le tour est joué !

 

Résultat de l'implémentation

Pour ma part, le fait d'avoir implémenter ma Feature-Policy a fait évoluer ma note sur le site SecurityHeaders de B à A, comme vous pouvez le constater avec la capture ci-dessous. Si en théorie c'est cool, en pratique cette évolution de note ne signifie pas grand chose à mon sens. En effet, la simple présence de l'en-tête Feature-Pollicy fait grimper la note, sans même tenir compte de ce que cet en-tête contient. Ainsi, avec une seule directive, la note grimpe, alors même qu'on peut faire beaucoup mieux... Bref, toujours est-il que pour ma part j'ai mis en place cet en-tête et qu'il ne me reste plus que la CSP, qui m'a déjà été demandée et à laquelle je vais m’atteler très prochainement 🙂

Score SecurityHeaders de JusteGeek.fr avec Feature-Policy

Score SecurityHeaders de JusteGeek.fr avec Feature-Policy

 

Sandstorm

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre. "Si un produit s'allume c'est un bon point. S'il est connecté, c'est encore mieux !"

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.