CentralCSP
PolitiquesContent-Security-PolicyDirectives

style-src-attr

La directive CSP style-src-attr contrôle les attributs style inline. Chaîne de repli, valeurs, exemples et risques.

Dernière mise à jour:

La directive style-src-attr d'une politique de sécurité du contenu (Content Security Policy, CSP) contrôle les attributs style= inline, le CSS écrit directement sur un élément comme style="color:red". Elle ne couvre pas les feuilles de style ni les blocs <style>, ceux-ci relèvent de style-src-elem. Utilisez style-src-attr pour appliquer une règle distincte, en général plus stricte, aux attributs de style inline.

Une politique minimale sûre pour cette directive, qui bloque tous les attributs style= inline:

Content-Security-Policy: style-src-attr 'none'

Chaîne de repli

style-src-attr se replie sur style-src, puis sur default-src. Si vous ne définissez pas style-src-attr, les attributs style= inline sont vérifiés contre style-src, et si elle est absente, contre default-src. Définir style-src-attr remplace style-src pour les attributs style= uniquement.

La plupart des politiques n'ont pas besoin de style-src-attr, puisque style-src couvre déjà les attributs style=. La raison habituelle de la définir est de bloquer complètement les attributs de style inline avec 'none' tout en autorisant encore des feuilles de style via style-src.

Valeurs

style-src-attr accepte les mêmes types de valeurs que style-src, mais seules quelques-unes peuvent correspondre à un attribut style= inline.

ValeurStatutDescription
'none'✅ BonBloque tous les attributs style= inline. S'utilise seule.
'sha256-...'✅ BonEmpreinte du texte exact de l'attribut; ne correspond qu'avec 'unsafe-hashes'.
'unsafe-hashes'❌ RisquéPermet aux hashes de correspondre aux attributs style=; rouvre cette surface, à réserver à une migration.
'report-sample'✅ BonAjoute les 40 premiers caractères de l'attribut bloqué aux reports.
'unsafe-inline'❌ RisquéAutorise tous les attributs style=, y compris injectés.

La grammaire accepte aussi 'self' et des sources host, scheme et nonce, mais un attribut inline n'a pas d'URL à laquelle les faire correspondre. En pratique, style-src-attr s'utilise avec un petit ensemble de valeurs:

  • 'none' pour bloquer tous les attributs style= inline.
  • 'unsafe-inline' pour tous les autoriser (déconseillé).
  • Un hash accompagné du mot-clé 'unsafe-hashes', qui est ce qui permet à un hash de correspondre à un attribut style=.

Un nonce ne peut pas marquer un attribut, donc les attributs style= inline sont autorisés par 'unsafe-inline' ou par un hash plus 'unsafe-hashes', pas par un nonce.

Exemples

Bloquer tous les attributs de style inline tout en laissant les feuilles de style se charger normalement:

Content-Security-Policy:
    style-src 'self' 'nonce-r4nd0m';
    style-src-attr 'none'

Usage courant

style-src-attr 'none' est la cible propre, elle force le style dans des feuilles de style et des blocs <style> marqués d'un nonce. Quand un template hérité pose quelques attributs style= statiques que vous ne pouvez pas encore retirer, hachez-les et ajoutez 'unsafe-hashes', puis prévoyez leur migration. Le générateur de hash calcule l'empreinte et l'évaluateur CSP signale les règles faibles. Voir aussi le guide sur la suppression de unsafe-inline.

Notes de sécurité

Les attributs style= inline sont un vecteur d'injection CSS utilisé dans des recouvrements de phishing et l'exfiltration de données par sélecteurs. style-src-attr 'none' supprime ce vecteur.

  • 'unsafe-inline' autorise tous les attributs style=, y compris injectés, donc il annule la protection.
  • 'unsafe-hashes' ne fait qu'élargir la correspondance des hashes aux attributs style= (et aux event handlers inline). Il n'autorise pas à lui seul des blocs <style> inline entiers.

Contournements et risques connus

Le risque principal est de laisser les attributs de style inline ouverts par accident. Si style-src-attr n'est pas définie et que style-src (ou default-src) porte 'unsafe-inline', tous les attributs style= s'appliquent, même avec une règle serrée sur les feuilles de style. Définissez style-src-attr 'none' pour fermer cette brèche.

Les attributs hachés sont des chaînes figées, donc le moindre changement du texte de l'attribut casse le hash. Traitez les attributs style= hachés comme une étape de migration vers leur suppression, pas comme un état permanent.

Recommandation

Marquez d'un nonce ou d'un hash les styles que vous contrôlez sur style-src et bloquez complètement les attributs style= inline:

Content-Security-Policy:
    style-src 'self' 'nonce-{RANDOM}';
    style-src-attr 'none'

Cela garde le style dans des feuilles de style et des blocs <style> marqués d'un nonce, sans 'unsafe-inline' nulle part. Si un attribut hérité ne peut pas encore bouger, hachez-le avec 'unsafe-hashes' comme étape temporaire et planifiez son retrait.

Reporting

Un attribut de style inline bloqué produit un report csp-violation avec style-src-attr comme directive effective. Ajoutez 'report-sample' pour inclure un court extrait afin de localiser l'attribut. CentralCSP agrège ces reports pour que vous puissiez trouver et retirer les attributs style= inline avant de resserrer la directive.

Prise en charge par les navigateurs

Largement prise en charge par les navigateurs actuels.

Voir aussi

Sources

On this page