Ce blog étant plutôt de conception simple j’ai activé une policy des plus simples.
Header set Content-Security-Policy "default-src 'self';
Avec cette règle, toute ressource provenant du site lui-même sera autorisée, mais toute ressource extérieure sera interdite.
Mais en chargeant la page d’admin du blog je tombe sur un problème, avec ce message d’erreur dans le debugger Firefox.
Après m’être longtemps creusé la tête et fouillé le web, je suis tombé sur un blog des développeur Google expliquant la fonction 'unsafe-inline'.
Cette fonction permet de charger les scripts javascript inline, qui autrement seraient bloqués.
Ainsi j’ai réécrit la policy en explicitant tous les types de ressources et en ajoutant la directive 'unsafe-inline' là où c’est nécessaire, ce qui donne ceci.
Header set Content-Security-Policy "default-src 'self'; img-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
Voilà, maintenant en visitant ce blog vous serez certain qu’aucun contenu externe et malveillant ne se chargera à votre insu.
1 From Franck -
J'ai dans le projet d'activer les CSP côté « public » pour Dotclear, comme ici sur ce blog, sauf que ça pose un certain nombres de problèmes, au delà des simples scripts Javascript et règles CSS inline : quid des contenus externes, comme par exemple une vidéo Youtube, une photo provenant de Flickr, … Ça complique singulièrement la gestion des directives.
2 From Solarus -
Oui, je comprends tout à fait, ce serveur me sert de «labo» d’expérimentation, il y a aussi un Piwik et un Nextcloud donc il faut que je trouve le bon compromis pour la CSP. Je te ferai un retour de mes différents test.
Mais bon, je ne sais pas si c’est une bonne idée de gérer la CSP directement dans l’appli, je pense qu’il faut mieux laisser chaque administrateur gérer sa CSP comme il le sent.
3 From Franck -
Je pensais mettre en place, au moins dans un 1er temps, un mode « reporting only » pour le côté public — c'est d'ailleurs déjà possible pour le côté admin —, avec proposition de directive(s) associée(s), mais sans aller plus loin.
Maintenant, sur des blogs qui agrègent pas mal de contenus externes, les directives peuvent vite devenir aussi longues qu'un roman.
4 From Nico -
Yop, je commente un peu tardivement, mais je pense qu'une possibilité de CSP devrait t'intéresser : les hash ou les nounces. cf https://www.nicolas-hoffmann.net/co... (et la suivante en-dessous).
C'est supporté uniquement sur CSP 2 (de mémoire, les nounces marchent sur Firefox/Chrome sans souci)
5 From Franck -
Merci __Nico__, je vais regarder ça…