script-src-elem et script-src-attr
Comment les directives script-src-elem et script-src-attr de CSP Level 3 divisent le contrôle des scripts, et comment elles se replient sur script-src.
CSP Level 3 divise le contrôle des scripts en deux directives plus étroites.
script-src-elem régit les éléments <script>, et script-src-attr régit
les attributs de gestionnaires d'événements en ligne. Toutes deux se replient
sur script-src lorsqu'elles ne sont pas définies, donc la plupart des sites
n'ont jamais besoin de les définir directement.
script-src-elem
S'applique aux éléments de script : les <script src> externes et les blocs
<script> en ligne.
Content-Security-Policy: script-src-elem 'self' https://cdn.example.com
Lorsqu'elle est présente, elle reprend le chargement des éléments à
script-src. C'est utile lorsque vous voulez des règles différentes pour les
éléments de script et pour les gestionnaires d'événements, par exemple autoriser
un CDN pour <script src> tout en bloquant tous les gestionnaires en ligne.
script-src-attr
S'applique aux attributs de gestionnaires d'événements en ligne tels que
onclick, onload et onerror.
Content-Security-Policy: script-src-attr 'none'
script-src-attr 'none' bloque chaque gestionnaire d'événement en ligne tout en
laissant vos éléments <script> régis séparément. Un hachage listé ici, combiné
à 'unsafe-hashes', peut autoriser des
gestionnaires spécifiques.
La chaîne de repli
Pour un script donné, le navigateur choisit la directive la plus spécifique qui est définie :
script-src-elemouscript-src-attr, selon que le script est un élément ou un gestionnaire d'attribut.script-src, si la directive spécifique n'est pas définie.default-src, siscript-srcn'est pas défini non plus.
Ainsi, cette politique bloque les gestionnaires en ligne mais autorise les
éléments de script de même origine, car script-src-attr est plus spécifique
pour les gestionnaires :
Content-Security-Policy: script-src 'self'; script-src-attr 'none'
Faut-il les utiliser ?
Définissez script-src et vous avez couvert les deux cas. N'utilisez les
directives divisées que lorsque vous avez une raison concrète de traiter
différemment les éléments et les gestionnaires d'attributs. Conserver un unique
script-src est plus facile à auditer.