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…
1 De Bernard -
Bonjour,
Chai pô si ça a un lien mais la première chose que me renvoie une recherche sur
unsafe-eval
c’estcontent_security_policy
sur Mozilla MDN web doc avec, via le menu, Compatibilité des navigateurs avec les API JavaScript WebExtensions…2 De Franck -
C’est tout à fait ça Bernard, mais en fait ma question n’en est plus une puisque j’ai compris entre temps que j’avais mal compris la RFC citée au début du billet.
Bref, va falloir que je fasse autrement :-)
3 De Nicolas -
Pour le script en question, tu peux peut-être le virer et remettre le flash ?
p.s: pousse pas, je suis déjà dehors !!!