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.
| Valeur | Statut | Description |
|---|---|---|
'none' | ✅ Bon | Bloque tous les attributs style= inline. S'utilise seule. |
'sha256-...' | ✅ Bon | Empreinte 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' | ✅ Bon | Ajoute 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 attributsstyle=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 attributstyle=.
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 attributsstyle=, y compris injectés, donc il annule la protection.'unsafe-hashes'ne fait qu'élargir la correspondance des hashes aux attributsstyle=(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.