# style-src-attr (/fr/docs/web-security/policies/content-security-policy/directives/style-src-attr)



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`](/fr/docs/web-security/policies/content-security-policy/directives/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:

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

## Chaîne de repli [#chaîne-de-repli]

`style-src-attr` se replie sur [`style-src`](/fr/docs/web-security/policies/content-security-policy/directives/style-src), puis sur [`default-src`](/fr/docs/web-security/policies/content-security-policy/directives/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 [#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 attributs `style=` inline.
* `'unsafe-inline'` pour tous les autoriser (déconseillé).
* Un [hash](/fr/docs/web-security/policies/content-security-policy/values/csp-hashes-nonce) accompagné du mot-clé [`'unsafe-hashes'`](/fr/docs/web-security/policies/content-security-policy/values/csp-keywords), 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 [#exemples]

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

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

## Usage courant [#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](/tools/csp-hash) calcule l'empreinte et l'[évaluateur CSP](/tools/csp-evaluator) signale les règles faibles. Voir aussi le guide sur la [suppression de unsafe-inline](/fr/blog/unsafe-inline-csp).

## Notes de sécurité [#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 [#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 [#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:

```http
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 [#reporting]

Un attribut de style inline bloqué produit un [report csp-violation](/fr/docs/web-security/reporting-api/reports/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 [#prise-en-charge-par-les-navigateurs]

Largement prise en charge par les navigateurs actuels.

## Voir aussi [#voir-aussi]

* [style-src](/fr/docs/web-security/policies/content-security-policy/directives/style-src)
* [style-src-elem](/fr/docs/web-security/policies/content-security-policy/directives/style-src-elem)
* [default-src](/fr/docs/web-security/policies/content-security-policy/directives/default-src)
* [Valeurs mots-clés CSP](/fr/docs/web-security/policies/content-security-policy/values/csp-keywords)
* [Générateur de hash](/tools/csp-hash)

## Sources [#sources]

* [MDN, CSP style-src-attr](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/style-src-attr)
* [W3C, Content Security Policy Level 3](https://www.w3.org/TR/CSP3/)
