GNU/Linux >> Tutoriels Linux >  >> Linux

Ajoutez facilement des en-têtes de sécurité à votre application Web ASP.NET Core et obtenez une note A

Eh bien, ça craint.

C'est mon site Web de podcast avec une cote F de SecurityHeaders.com. Quel est le problème? Je m'en suis occupé il y a des mois !

Il s'avère que j'ai récemment migré de Windows vers Linux sur Azure.

Si j'utilise IIS sous Windows, je peux (et j'ai fait) créer une section dans mon web.config qui ressemble à ceci.

Notez que j'ai ajouté quelques éléments personnalisés et vous voudrez vous assurer de ne pas simplement copier coller ceci. Faites le vôtre, le vôtre.

Notez que j'ai mis en liste blanche un tas de domaines pour m'assurer que mon site fonctionne. Notez également que j'ai un certain nombre de "unsafe-inlines" qui ne sont pas une idée.

<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Xss-Protection" value="1; mode=block"/>
<add name="X-Frame-Options" value="SAMEORIGIN"/>
<add name="Content-Security-Policy" value="default-src https:; img-src * 'self' data: https:; style-src 'self' 'unsafe-inline' www.google.com platform.twitter.com cdn.syndication.twimg.com fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com cse.google.com cdn.syndication.twimg.com platform.twitter.com platform.instagram.com www.instagram.com cdn1.developermedia.com cdn2.developermedia.com apis.google.com www.googletagservices.com adservice.google.com securepubads.g.doubleclick.net ajax.aspnetcdn.com ssl.google-analytics.com az416426.vo.msecnd.net/;"/>
<add name="Referrer-Policy" value="no-referrer-when-downgrade"/>
<add name="Feature-Policy" value="geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';"/>
<remove name="X-Powered-By" />
<remove name="X-AspNet-Version" />
<remove name="Server" />
</customHeaders>
</httpProtocol>
...

Mais, si je n'utilise PAS IIS - ce qui signifie que j'exécute mon application ASP.NET dans un conteneur ou sur Linux - cela sera ignoré. Depuis que je suis récemment passé à Linux, j'ai supposé (mon mauvais pour aucun test ici) que cela fonctionnerait tout simplement.

Mon site est hébergé sur Azure App Service pour Linux, je souhaite donc que ces en-têtes soient générés de la même manière. Il existe plusieurs excellents choix sous la forme de bibliothèques Open Source NuGet pour vous aider. Si j'utilise le pipeline middleware ASP.NET Core, ces en-têtes seront générés et fonctionneront de la même manière sur Windows ET Linux.

J'utiliserai les bibliothèques de sécurité NWebsec pour ASP.NET Core. Ils offrent un moyen simple et fluide d'ajouter les en-têtes que je veux.

POUR ÊTRE CLAIR : Oui, je, ou vous, pouvez ajouter ces en-têtes manuellement avec AddHeader mais ces bibliothèques simples garantissent que nos virgules et points-virgules sont corrects. Ils offrent également un middleware fortement typé, rapide et facile à utiliser.

Prendre le même web.config ci-dessus et le traduire en pipeline de configuration de Startup.cs avec NWebSec ressemble à ceci :

app.UseHsts(options => options.MaxAge(days: 30));
app.UseXContentTypeOptions();
app.UseXXssProtection(options => options.EnabledWithBlockMode());
app.UseXfo(options => options.SameOrigin());
app.UseReferrerPolicy(opts => opts.NoReferrerWhenDowngrade());

app.UseCsp(options => options
.DefaultSources(s => s.Self()
.CustomSources("data:")
.CustomSources("https:"))
.StyleSources(s => s.Self()
.CustomSources("www.google.com","platform.twitter.com","cdn.syndication.twimg.com","fonts.googleapis.com")
.UnsafeInline()
)
.ScriptSources(s => s.Self()
.CustomSources("www.google.com","cse.google.com","cdn.syndication.twimg.com","platform.twitter.com" ... )
.UnsafeInline()
.UnsafeEval()
)
);

Il existe un en-tête HTTP expérimental que NWebSec ne prend pas (encore) en charge, appelé Feature-Policy. C'est une façon pour votre site Web de déclarer côté serveur "mon site n'autorise pas l'utilisation de la webcam". Cela empêcherait un méchant d'injecter un script local qui utilise la webcam ou une autre fonctionnalité côté client.

Je vais le faire manuellement à la fois pour montrer que je peux, mais aussi que vous n'êtes pas limité par la bibliothèque de sécurité de votre choix.

REMARQUE : Une autre grande bibliothèque de sécurité est NetEscapades d'Andrew Lock qui inclut Feature-Policy ainsi que d'autres fonctionnalités intéressantes.

Voici mon middleware unique qui ajoute simplement l'en-tête Feature-Policy à toutes les réponses.

//Feature-Policy
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Feature-Policy", "geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';");
await next.Invoke();
});

Je vais maintenant valider, créer et déployer (le tout automatiquement pour moi avec Azure DevOps) et analyser à nouveau le site :

C'était assez simple et a pris moins d'une heure. Votre kilométrage peut varier mais c'est l'idée générale !

Parrain :Protégez vos applications contre l'ingénierie inverse et la falsification avec PreEmptive, les fabricants de Dotfuscator. Dotfuscator est intégré à Microsoft Visual Studio depuis 2003. Mentionnez HANSELMAN pour faire des économies sur une licence professionnelle !


Linux
  1. Mettez en miroir votre site Web avec rsync

  2. Trucs et astuces pour sécuriser votre serveur Web Nginx

  3. Font Finder - Recherchez et installez facilement les polices Web Google sous Linux

  4. Ajouter des arguments et des options à vos scripts Bash

  5. Exécution d'une application ASP.NET Core autonome sur Ubuntu

Explorer ASP.NET Core avec Docker dans les conteneurs Linux et Windows

Ajoutez facilement des en-têtes de sécurité à votre application Web ASP.NET Core et obtenez une note A

Déplacement d'un ASP.NET Core d'Azure App Service sur Windows vers Linux en testant d'abord dans WSL et Docker

Affirmez vos hypothèses - .NET Core et problèmes de paramètres régionaux subtils avec WSLs Ubuntu

Publication d'un site Web ASP.NET Core sur un hôte de machine virtuelle Linux bon marché

Internxt :conservez vos fichiers et vos photos en toute confidentialité et sécurité