CSP: base-uri

La directive HTTP Content-Security-Policy (CSP) base-uri restreint les URL qui peuvent être utilisées comme valeur d'un élément <base>. Si cette valeur est absente, alors toutes les adresses sont autorisées. Si cette directive est absente, l'agent utilisateur va utiliser la valeur dans l'élément <base>.

Version de CSP 2
Type de directive Document directive
default-src par défaut Non, ne pas la définir autorise toutes les URL

Syntaxe

Une ou plusieurs sources peuvent être autorisées pour cette directive :

Content-Security-Policy: base-uri <source>;
Content-Security-Policy: base-uri <source> <source>;

Sources

Bien que cette directive utilise les mêmes arguments que d'autres directives CSP, certains d'entre eux n'ont pas de sens concernant l'élément <base>, comme les valeurs 'unsafe-inline' et 'strict-dynamic'

La <source> peut être une des suivantes :

<host-source>
Des hôtes Internet par leur nom de domaine ou adresse IP, aussi bien qu'un protocole et/ou un numéro de port. L'adresse du site peut inclure un caractère de remplacement optionnel (l'astérisque '*'), qui ne peut être utilisée que pour indiquer un sous-domaine ou que tous les ports existants sont des sources valides.
Examples:
  • http://*.example.com: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com via le protocole http:.
  • mail.example.com:443: correspondra à toutes les tentatives d'accès sur le port 443 de mail.example.com.
  • https://store.example.com: correspondra à toutes les tentatives d'accès à store.example.com via le protocole https:.
  • *.example.com: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com en utilisant le protocole courant.
<scheme-source>
Un protocole tel que http: ou https:. Les deux-points sont nécessaires. Contrairement à d'autres valeurs ci-bas, les guillemets ne devraient pas être employés. Vous pouvez aussi spécifier des schémas de données (quoi que ce ne soit pas recommandé).
  • data: permet aux URI data: d'être utilisées comme sources de contenu. Cette pratique manque de sécurité ; une personne malveillante peut aussi injecter des URI data: arbitraires. Utilisez cette valeur avec parcimonie certainement pas pour des scripts.
  • mediastream: permet aux URI mediastream: d'être utilisées comme source de contenu.
  • blob: permet aux URI blob: d'être utilisées comme source de contenu.
  • filesystem: Allows URI filesystem: d'être utilisées comme source de contenu.
'self'
Cette valeur fait référence au domaine dont est originaire le document protégé, y compris le protocole et le numéro de port. Vous devez mettre cette valeur entre guillemets. Certains navigateurs excluent spécifiquement les valeurs blob et filesystem des directives de source. Les sites nécessitant une permission pour ces types de contenu peuvent les spécifier en utilisant l'attribut Data.
'unsafe-eval'
Permet l'usage de la fonction eval() et de méthodes similaires pour créer du code à partir de chaines de caractères. Vous devez mettre cette valeur entre guillemets.
'unsafe-hashes'
Permet l'usage de certains écouteurs d'évènements par attributs. Si vous n'avez besoin que d'écouteurs d'évènements par attributs et non d'éléments <script> embarqués ou d'URL javascript:, cette valeur est plus sécurisée que unsafe-inline.
'unsafe-inline'
Permet l'usage de ressources embarquées, tels que des éléments <script> (sans src), d'URL javascript:, de gestionnaire d'évènement par attributs (on<eventName>), et d'éléments <style>. Vous devez mettre cette valeur entre guillemets.
'none'
Aucune source n'est admise. Vous devez mettre cette valeur entre guillemets.
'nonce-<base64-value>'
Une liste de permissions pour des scripts embarqués spécifiques en utilisant un nonce (number used once, nombre à usage unique) cryptographique. Le serveur doit générer un nonce à chaque fois qu'il transmet une réponse. Il est extrèmement important de fournir des nonces non prédictibles, puisque le contraire permettrait aisément de contourner la stratégie de sécurité. Voir inline script non fiables pour avoir un exemple. Spécifier un nonce implique que les navigateurs modernes ignoreront la valeur 'unsafe-inline', qui peut toutefois être laissée pour les anciens navigateurs ne supportant pas les nonces.
'<hash-algorithm>-<base64-value>'
Un hash sha256, sha384 ou sha512 d'un <script> ou d'un <style>. L'usage de cette source consiste en deux parties séparées par un tiret : l'algorithme de chiffrage utilisé pour générer le hash à gauche et le hash encodé en base 64 à droite. Lors de la génération du hash, il ne faut pas inclure les balises <script> or <style> et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). Voir inline script non fiables pour en avoir un exemple. En CSP 2.0, cette valeur ne s'applique qu'aux scripts embarqués. CSP 3.0 le permet aussi dans le cas de scripts externes.
'strict-dynamic'
La valeur strict-dynamic spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute les valeurs telles que 'self' ou 'unsafe-inline' et listes de permissions sont ignorées. Voir script-src pour en avoir un exemple.
'report-sample'
Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé.

Exemples

Configuration par balise <meta>

<meta http-equiv="Content-Security-Policy" content="base-uri 'self'">

Configuration par Apache

<IfModule mod_headers.c> 
Header set Content-Security-Policy "base-uri 'self'";
</IfModule>

Configuration par Nginx

add_header Content-Security-Policy "base-uri 'self';"

Cas de violation

À partir du moment où votre domaine n'est pas example.com, un élément <base> avec son attribut href défini à https://example.com résultera en une violation de CSP.

<meta http-equiv="Content-Security-Policy" content="base-uri 'self'">
<base href="https://example.com/">

// Error: Refused to set the document's base URI to 'https://example.com/' 
// because it violates the following Content Security Policy 
// directive: "base-uri 'self'"

Spécifications

Spécification Statut Commentaire
Content Security Policy Level 3
La définition de 'base-uri' dans cette spécification.
Version de travail Inchangé.
Content Security Policy Level 2
La définition de 'base-uri' dans cette spécification.
Recommendation Définition initiale.

Compatibilité des navigateurs

No compatibility data found. Please contribute data for "http.headers.csp.base-uri" (depth: 1) to the MDN compatibility data repository.

Voir aussi