CentralCSP
PolitiquesContent-Security-Policy

Content Security Policy (CSP), la référence complète

Fonctionnement de CSP, ses headers, les valeurs placées dans une directive, et chaque directive, avec le reporting de bout en bout.

Dernière mise à jour:

La Content Security Policy (CSP) est un header de réponse HTTP qui indique au navigateur quelles ressources une page a le droit de charger et d'exécuter. C'est le navigateur qui l'applique : un script, une feuille de style, une image, une frame ou une connexion qu'aucune directive n'autorise est bloqué avant de s'exécuter. C'est ce qui fait de CSP la principale défense contre le cross-site scripting (XSS) et l'injection de contenu, et la raison pour laquelle c'est le seul contrôle qui arrête un script injecté même quand l'injection, elle, a réussi.

Une politique est une liste de directives séparées par des points-virgules, chacune nommant un type de ressource et les sources autorisées pour ce type :

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'none'

CSP peut aussi signaler au lieu de bloquer. Content-Security-Policy-Report-Only porte la même politique, n'applique rien, et envoie un report csp-violation pour tout ce qu'elle aurait bloqué. Vous mesurez donc une politique sur du trafic réel avant de l'activer.

Les éléments d'une politique

ÉlémentCe que c'estRéférence
HeaderContent-Security-Policy applique, -Report-Only se contente de signaler. Un élément <meta> peut aussi porter une politique, avec des limites.Headers
DirectiveLe type de ressource concerné : script-src, img-src, frame-ancestors.Directives
Liste de sourcesLes valeurs après une directive : keywords, hosts, schemes, hashes, nonces.Valeurs
RepliLa plupart des directives de fetch se replient sur default-src quand elles sont absentes.default-src
Reportingreport-to (et l'ancien report-uri) désignent où sont envoyées les violations.report-to

Les directives par rôle

Chaque directive a sa page. Groupées par ce qu'elles gouvernent :

Une politique à copier

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'nonce-{ALEATOIRE}';
  style-src 'self' 'unsafe-inline';
  img-src 'self' data:;
  connect-src 'self';
  object-src 'none';
  base-uri 'none';
  frame-ancestors 'none';
  report-to csp-endpoint

object-src 'none' et base-uri 'none' ferment les deux contournements qui mettent en défaut une politique par ailleurs stricte : le contenu de plugin, et un élément <base> injecté qui redirige toutes les URL de script relatives. frame-ancestors 'none' est le remplacement moderne de X-Frame-Options. Un nonce neuf à chaque réponse est ce qui vous permet de retirer 'unsafe-inline' de script-src, d'où vient la quasi-totalité de la protection XSS de CSP.

Sous-sections

Commencer ici

Reporting

Chaque ressource bloquée produit un report csp-violation qui nomme la directive ayant bloqué et l'URL bloquée, livré via la Reporting API. Ces reports sont la matière première d'une politique : déployez-la en Report-Only, lisez ce qu'elle aurait bloqué, resserrez. CentralCSP les collecte et les agrège par site, donc un déploiement s'appuie sur ce que les navigateurs de vos visiteurs ont réellement observé plutôt que sur des suppositions.

Sources

On this page