CSP mon amour

Toujours en train d’essayer de virer les unsafe-… des directives de Content-Security-Policy de l’admin de Dotclear, je m’arrache les cheveux avec un problème gênant que je ne m’explique pas et que d’ailleurs d’autres ne s’expliquent pas non plus !

Explications :

Pour la médiathèque, on utilise un script jQuery qui permet de faire de l’envoi multiple de fichiers. Ce script utilise des instructions normalement interdites si la directive unsafe-eval n’est pas précisée. À ce propos, la RFC indique ceci :

If ‘unsafe-eval’ is not in allowed script sources:

TL;DR: reject!

Je pensais benoîtement qu’en ajoutant le hash du script en question, ça me permettrait de passer outre ; sauf que non, à la différence de ce qui est possible pour unsafe-inline, on ne peut utiliser ni un hash ni un nonce, il faut donc indiquer directement l’URL du script.

Ce que je fais ; voilà la directive envoyée en entête :

script-src 'self' https://admin.dc2.local//js/jsUpload/tmpl.js https://admin.dc2.local//js/jsUpload/template-upload.js https://admin.dc2.local//js/jsUpload/template-download.js dc2.local

Eh bien malgré ça je reçois tout de même une erreur, que ce soit avec Chrome ou Firefox, qui dit ceci :

Uncaught EvalError: Refused to evaluate a string as JavaScript because ‘unsafe-eval’ is not an allowed source of script in the following Content Security Policy directive: “script-src ‘self’ https://admin.dc2.local/js/jsUpload/tmpl.js https://admin.dc2.local/js/jsUpload/template-upload.js https://admin.dc2.local/js/jsUpload/template-download.js dc2.local “.

at new Function (<anonymous>)
at tmpl (tmpl.js?v=2.15-dev:23)
at template-upload.js?v=2.15-dev:5
tmpl @ tmpl.js?v=2.15-dev:23
(anonymous) @ template-upload.js?v=2.15-dev:5

Et pourtant les scripts en question sont présents dans les sources autorisées de la directive !

Dis docteur, je fais comment ?


Après discussion sur IRC (merci ##openweb), il s’avère que le unsafe-eval est un contexte et est indépendant des autres sources (en gros). Du coup soit on l’indique dans la directive et on laisse passer, soit on l’enlève et il faut alors corriger les scripts problématiques, soit les changer !

Bref, ça va pas être simple ; du coup je vais peut-être commencer par le unsafe-inline et je verrai éventuellement plus tard pour le reste…

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/14189

Haut de page