Appliquer une stratégie de sécurité du contenu pour ASP.NET Core Blazor
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 8 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la Stratégie de prise en charge de .NET et .NET Core. Pour la version actuelle, consultez la version .NET 8 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 8 de cet article.
Cet article explique comment utiliser une stratégie de sécurité de contenu (CSP) avec des applications ASP.NET Core Blazor pour vous protéger contre les attaques de scripting inter-site (XSS).
Le scripting inter-site (XSS) est une vulnérabilité de sécurité dans laquelle un cyberattaquant place un ou plusieurs scripts côté client malveillants dans le contenu rendu d’une application. Un stratégie de sécurité du contenu permet de se protéger contre les attaques XSS en informant le navigateur de la validité des :
- Sources du contenu chargé, y compris les scripts, les feuilles de style, les images et les plug-ins.
- Actions effectuées par une page, spécifiant les cibles d’URL autorisées des formulaires.
Pour appliquer une stratégie de sécurité du contenu à une application, le développeur spécifie plusieurs directives de sécurité du contenu CSP dans un ou plusieurs en-têtes Content-Security-Policy
ou balises <meta>
. Pour obtenir des conseils sur l’application d’un fournisseur de solutions Cloud à une application en code C# au démarrage, consultez Démarrage de ASP.NET Core Blazor.
Les stratégies sont évaluées par le navigateur pendant le chargement d’une page. Le navigateur inspecte les sources de la page et détermine si elles répondent aux exigences des directives de sécurité du contenu. Lorsque les directives de stratégie ne sont pas respectées pour une ressource, le navigateur ne charge pas cette ressource. Par exemple, imaginez une stratégie qui n’autorise pas les scripts tiers. Lorsqu’une page contient une balise <script>
avec une origine tierce dans l’attribut src
, le navigateur empêche le chargement du script.
La stratégie de sécurité du contenu est prise en charge dans la plupart des navigateurs mobiles et de bureau modernes, notamment Chrome, Edge, Firefox, Opera et Safari. La stratégie de sécurité du contenu est recommandée pour les applications Blazor.
Directives de stratégie
Spécifiez au minimum les directives et les sources suivantes pour les applications Blazor. Ajoutez des directives et des sources supplémentaires, si nécessaire. Les directives suivantes sont utilisées dans la section Appliquer la stratégie de cet article, où sont fournis des exemples de stratégies de sécurité pour les applications Blazor :
- base-uri : limite les URL de la balise
<base>
d’une page. Spécifiezself
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - default-src : indique une solution de repli pour les directives sources qui ne sont pas explicitement spécifiées par la stratégie. Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - img-src : indique des sources valides des images.
- Spécifiez
data:
pour autoriser le chargement d’images à partir des URLdata:
. - Spécifiez
https:
pour autoriser le chargement d’images à partir de points de terminaison HTTPS.
- Spécifiez
- object-src : indique des sources valides des balises
<object>
,<embed>
et<applet>
. Spécifieznone
pour empêcher toutes les sources d’URL. - script-src : indique des sources valides des scripts.
- Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Dans une application Blazor côté client :
- Spécifiez
wasm-unsafe-eval
pour autoriser le runtime Mono Blazor côté client à fonctionner. - Spécifiez les hachages supplémentaires pour autoriser le chargement de vos scripts hors infrastructure obligatoires.
- Spécifiez
- Dans une application Blazor côté serveur, spécifiez les hachages pour autoriser le chargement des scripts obligatoires.
- Spécifiez
- style-src : indique des sources valides des feuilles de style.
- Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Si l’application utilise des styles intralignes, spécifiez
unsafe-inline
pour autoriser l’utilisation de vos styles intralignes.
- Spécifiez
- upgrade-insecure-requests : indique que les URL de contenu provenant de sources non sécurisées (HTTP) doivent être acquises de manière sécurisée via HTTPS.
- base-uri : limite les URL de la balise
<base>
d’une page. Spécifiezself
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - default-src : indique une solution de repli pour les directives sources qui ne sont pas explicitement spécifiées par la stratégie. Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - img-src : indique des sources valides des images.
- Spécifiez
data:
pour autoriser le chargement d’images à partir des URLdata:
. - Spécifiez
https:
pour autoriser le chargement d’images à partir de points de terminaison HTTPS.
- Spécifiez
- object-src : indique des sources valides des balises
<object>
,<embed>
et<applet>
. Spécifieznone
pour empêcher toutes les sources d’URL. - script-src : indique des sources valides des scripts.
- Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Dans une application Blazor côté client :
- Spécifiez
unsafe-eval
pour autoriser le runtime Mono Blazor côté client à fonctionner. - Spécifiez les hachages supplémentaires pour autoriser le chargement de vos scripts hors infrastructure obligatoires.
- Spécifiez
- Dans une application Blazor côté serveur, spécifiez les hachages pour autoriser le chargement des scripts obligatoires.
- Spécifiez
- style-src : indique des sources valides des feuilles de style.
- Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Si l’application utilise des styles intralignes, spécifiez
unsafe-inline
pour autoriser l’utilisation de vos styles intralignes.
- Spécifiez
- upgrade-insecure-requests : indique que les URL de contenu provenant de sources non sécurisées (HTTP) doivent être acquises de manière sécurisée via HTTPS.
- base-uri : limite les URL de la balise
<base>
d’une page. Spécifiezself
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - default-src : indique une solution de repli pour les directives sources qui ne sont pas explicitement spécifiées par la stratégie. Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - img-src : indique des sources valides des images.
- Spécifiez
data:
pour autoriser le chargement d’images à partir des URLdata:
. - Spécifiez
https:
pour autoriser le chargement d’images à partir de points de terminaison HTTPS.
- Spécifiez
- object-src : indique des sources valides des balises
<object>
,<embed>
et<applet>
. Spécifieznone
pour empêcher toutes les sources d’URL. - script-src : indique des sources valides des scripts.
- Spécifiez la source de l’hôte
https://stackpath.bootstrapcdn.com/
des scripts bootstrap. - Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Dans une application Blazor côté client :
- Spécifiez
unsafe-eval
pour autoriser le runtime Mono Blazor côté client à fonctionner. - Spécifiez les hachages supplémentaires pour autoriser le chargement de vos scripts hors infrastructure obligatoires.
- Spécifiez
- Dans une application Blazor côté serveur, spécifiez les hachages pour autoriser le chargement des scripts obligatoires.
- Spécifiez la source de l’hôte
- style-src : indique des sources valides des feuilles de style.
- Spécifiez la source de l’hôte
https://stackpath.bootstrapcdn.com/
des feuilles de style bootstrap. - Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Spécifiez
unsafe-inline
pour autoriser l’utilisation de styles intralignes.
- Spécifiez la source de l’hôte
- upgrade-insecure-requests : indique que les URL de contenu provenant de sources non sécurisées (HTTP) doivent être acquises de manière sécurisée via HTTPS.
- base-uri : limite les URL de la balise
<base>
d’une page. Spécifiezself
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - default-src : indique une solution de repli pour les directives sources qui ne sont pas explicitement spécifiées par la stratégie. Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - img-src : indique des sources valides des images.
- Spécifiez
data:
pour autoriser le chargement d’images à partir des URLdata:
. - Spécifiez
https:
pour autoriser le chargement d’images à partir de points de terminaison HTTPS.
- Spécifiez
- object-src : indique des sources valides des balises
<object>
,<embed>
et<applet>
. Spécifieznone
pour empêcher toutes les sources d’URL. - script-src : indique des sources valides des scripts.
- Spécifiez la source de l’hôte
https://stackpath.bootstrapcdn.com/
des scripts bootstrap. - Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Dans une application Blazor côté client :
- Spécifiez les hachages pour autoriser le chargement des scripts obligatoires.
- Spécifiez
unsafe-eval
pour utilisereval()
et les méthodes pour créer un code à partir de chaînes.
- Dans une application Blazor côté serveur, spécifiez les hachages pour autoriser le chargement des scripts obligatoires.
- Spécifiez la source de l’hôte
- style-src : indique des sources valides des feuilles de style.
- Spécifiez la source de l’hôte
https://stackpath.bootstrapcdn.com/
des feuilles de style bootstrap. - Spécifiez
self
pour indiquer que l’origine de l’application, y compris le schéma et le numéro de port, est une source valide. - Spécifiez
unsafe-inline
pour autoriser l’utilisation de styles intralignes. La déclaration inlined de l’interface utilisateur est requise pour de reconnecter le client et le serveur après la requête initiale. Dans une version ultérieure, le style intraligne peut être supprimé afin queunsafe-inline
ne soit plus obligatoire.
- Spécifiez la source de l’hôte
- upgrade-insecure-requests : indique que les URL de contenu provenant de sources non sécurisées (HTTP) doivent être acquises de manière sécurisée via HTTPS.
Les directives précédentes sont prises en charge par tous les navigateurs, à l’exception de Microsoft Internet Explorer.
Pour obtenir des hachages SHA pour des scripts intralignes supplémentaires :
- Appliquez la stratégie de sécurité du contenu indiquée dans la section Appliquer la stratégie.
- Accédez à la console des outils de développement du navigateur lors de l’exécution locale de l’application. Le navigateur calcule et affiche des hachages des scripts bloqués lorsqu’un en-tête de fournisseur de solutions Cloud ou une balise
meta
est présent(e). - Copiez les hachages fournis par le navigateur dans les sources
script-src
. Utilisez des guillemets simples autour de chaque hachage.
Pour obtenir une matrice de prise en charge du navigateur de niveau 2 de stratégie de sécurité du contenu, consultez Puis-je utiliser : stratégie de sécurité du contenu niveau 2.
Application de la stratégie
Utilisez une balise <meta>
pour appliquer la stratégie :
- Définissez la valeur de l’attribut
http-equiv
surContent-Security-Policy
. - Placez les directives dans la valeur de l’attribut
content
. Des directives distinctes avec un point-virgule (;
). - Placez toujours la balise
meta
dans le<head>
contenu.
Les sections suivantes présentent des exemples de stratégie. Ces exemples sont versionnés avec cet article pour chaque édition de Blazor. Pour utiliser une version appropriée pour votre édition, sélectionnez la version du document à l’aide du sélecteur de liste déroulante Version sur cette page web.
Applications Blazor côté serveur
Dans le <head>
contenu, appliquez les directives décrites dans la section Directives de stratégie :
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src 'self';
style-src 'self';
upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src https://stackpath.bootstrapcdn.com/
'self';
style-src https://stackpath.bootstrapcdn.com/
'self'
'unsafe-inline';
upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src https://stackpath.bootstrapcdn.com/
'self'
'sha256-34WLX60Tw3aG6hylk0plKbZZFXCuepeQ6Hu7OqRf8PI=';
style-src https://stackpath.bootstrapcdn.com/
'self'
'unsafe-inline';
upgrade-insecure-requests;">
Ajoutez les hachages supplémentaires script-src
et style-src
selon les besoins de l’application. Pendant le développement, utilisez un outil en ligne ou des outils de développement de navigateur pour calculer les hachages pour vous. Par exemple, l’erreur suivante dans la console des outils de navigateur signale le hachage d’un script obligatoire non couvert par la stratégie :
Refus d’exécuter un script intraligne parce qu’il enfreint la directive de stratégie de sécurité du contenu suivante : « ... ». Le mot clé « unsafe-inline », un hachage (« sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA= ») ou un nonce (« nonce-... ») est obligatoire pour activer l’exécution intraligne.
Le script particulier associé à l’erreur s’affiche dans la console après l’erreur.
Applications Blazor côté client
Dans le <head>
contenu, appliquez les directives décrites dans la section Directives de stratégie :
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src 'self'
'wasm-unsafe-eval';
style-src 'self';
upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src 'self'
'unsafe-eval';
style-src 'self';
upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src 'self'
'sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA='
'unsafe-eval';
style-src 'self';
upgrade-insecure-requests;">
Remarque
Le hachage sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA=
représente le script inlined utilisé pour les applications Blazor côté client. Cela peut être supprimé à l’avenir.
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src https://stackpath.bootstrapcdn.com/
'self'
'sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA='
'unsafe-eval';
style-src https://stackpath.bootstrapcdn.com/
'self'
'unsafe-inline';
upgrade-insecure-requests;">
<meta http-equiv="Content-Security-Policy"
content="base-uri 'self';
default-src 'self';
img-src data: https:;
object-src 'none';
script-src https://stackpath.bootstrapcdn.com/
'self'
'sha256-v8ZC9OgMhcnEQ/Me77/R9TlJfzOBqrMTW8e1KuqLaqc='
'sha256-If//FtbPc03afjLezvWHnC3Nbu4fDM04IIzkPaf3pH0='
'sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA='
'unsafe-eval';
style-src https://stackpath.bootstrapcdn.com/
'self'
'unsafe-inline';
upgrade-insecure-requests;">
Ajoutez les hachages supplémentaires script-src
et style-src
selon les besoins de l’application. Pendant le développement, utilisez un outil en ligne ou des outils de développement de navigateur pour calculer les hachages pour vous. Par exemple, l’erreur suivante dans la console des outils de navigateur signale le hachage d’un script obligatoire non couvert par la stratégie :
Refus d’exécuter un script intraligne parce qu’il enfreint la directive de stratégie de sécurité du contenu suivante : « ... ». Le mot clé « unsafe-inline », un hachage (« sha256-v8v3RKRPmN4odZ1CWM5gw80QKPCCWMcpNeOmimNL2AA= ») ou un nonce (« nonce-... ») est obligatoire pour activer l’exécution intraligne.
Le script particulier associé à l’erreur s’affiche dans la console après l’erreur.
Appliquer une stratégie de sécurité de contenu (CSP, Content Security Policy) dans des environnements hors Development
Lorsqu’une CSP est appliquée au contenu <head>
d’une application Blazor, elle interfère avec les tests locaux dans l’environnement de Development
. Par exemple, le lien du navigateur et le script d’actualisation du navigateur ne peuvent pas être chargés. Les exemples suivants montrent comment appliquer la balise <meta>
de la CSP dans des environnements hors Development
.
Remarque
Les exemples de cette section n’affichent pas la balise <meta>
complète pour les CSP. Les balises <meta>
complètes se trouvent dans les sous-sections de la section Appliquer la stratégie plus haut dans cet article.
Trois approches générales sont disponibles :
- Appliquez la CSP via le composant
App
, qui permet d’appliquer la CSP à toutes les layouts de l’application. - Si vous devez appliquer des CSP à différentes zones de l’application, par exemple une CSP personnalisée pour les pages d’administration uniquement, appliquez la CSP par layout à l’aide de la balise
<HeadContent>
. Pour une efficacité totale, chaque fichier de layout d’application doit adopter cette approche. - Le service d’hébergement ou le serveur peut fournir une CSP via un en-tête
Content-Security-Policy
ajouté aux réponses sortantes d’une application. Étant donné que cette approche varie en fonction du service d’hébergement ou du serveur, elle n’est pas traitée dans les exemples suivants. Si vous souhaitez adopter cette approche, consultez la documentation de votre fournisseur de services d’hébergement ou votre serveur.
Approches Blazor Web App
Dans le composant App
(Components/App.razor
), injectez IHostEnvironment :
@inject IHostEnvironment Env
Dans le contenu <head>
du composant App
, appliquez la CSP quand elle n’est pas dans l’environnement de Development
:
@if (!Env.IsDevelopment())
{
<meta ...>
}
Vous pouvez également appliquer des CSP par layout dans le dossier Components/Layout
, comme l’illustre l’exemple suivant. Assurez-vous que chaque layout spécifie une CSP.
@inject IHostEnvironment Env
@if (!Env.IsDevelopment())
{
<HeadContent>
<meta ...>
</HeadContent>
}
Approches d’application Blazor WebAssembly
Dans le composant App
(App.razor
), injectez IWebAssemblyHostEnvironment :
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env
Dans le contenu <head>
du composant App
, appliquez la CSP quand elle n’est pas dans l’environnement de Development
:
@if (!Env.IsDevelopment())
{
<HeadContent>
<meta ...>
</HeadContent>
}
Vous pouvez également utiliser le code précédent, mais appliquer des CSP par layout dans le dossier Layout
. Assurez-vous que chaque layout spécifie une CSP.
Limitations des balises meta
Une stratégie de balise <meta>
ne prend pas en charge les directives suivantes :
Pour prendre en charge les directives précédentes, utilisez un en-tête nommé Content-Security-Policy
. La chaîne de directive est la valeur de l’en-tête.
Tester une stratégie et recevoir des rapports de violation
Le test permet de vérifier que les scripts tiers ne sont pas bloqués par inadvertance lors de la création d’une stratégie initiale.
Pour tester une stratégie sur une certaine période sans appliquer les directives de stratégie, définissez l’attribut <meta>
de la balise http-equiv
ou le nom d’en-tête d’une stratégie basée sur l’en-tête sur Content-Security-Policy-Report-Only
. Les rapports d’échec sont envoyés sous forme de documents JSON vers une URL spécifiée. Pour plus d’informations, consultez Documentation web sur notification de réception du message : rapports de stratégie de sécurité du contenu uniquement.
Pour la création de rapports sur les violations pendant qu’une stratégie est active, consultez les articles suivants :
Bien que l’utilisation de report-uri
ne soit plus recommandée, les deux directives doivent être utilisées jusqu’à ce que report-to
soit pris en charge par tous les principaux navigateurs. N’utilisez pas report-uri
exclusivement, car la prise en charge de report-uri
peut être supprimée des navigateurs à tout moment. Supprimez la prise en charge de report-uri
dans vos stratégies lorsque report-to
est entièrement pris en charge. Pour suivre l’adoption de report-to
, consultez Puis-je utiliser : report-to.
Testez et mettez à jour la stratégie d’une application à chaque édition.
Résoudre des problèmes
- Les erreurs s’affichent dans la console des outils de développement du navigateur. Les navigateurs fournissent des informations sur :
- Les éléments qui ne sont pas conformes à la stratégie.
- Comment modifier la stratégie pour autoriser un élément bloqué.
- Une stratégie n’est totalement efficace que lorsque le navigateur du client prend en charge toutes les directives comprises. Pour obtenir une matrice de prise en charge du navigateur actuel, consultez Puis-je utiliser : stratégie de sécurité du contenu.