GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiunta semplice di intestazioni di sicurezza alla tua app Web ASP.NET Core e ottenere un voto A

Beh, che schifo.

Questo è il mio sito Web di podcast con una valutazione F da SecurityHeaders.com. Qual è l'accordo? Me ne sono occupato io mesi fa!

Risulta, recentemente sono passato da Windows a Linux su Azure.

Se sto usando IIS su Windows, posso (e l'ho fatto) creare una sezione nel mio web.config che assomigli a questa.

Tieni presente che ho aggiunto alcune cose personalizzate e vorrai assicurarti di NON copiare e incollare semplicemente questo. Fai il tuo, tuo.

Tieni presente che ho inserito nella whitelist un gruppo di domini per assicurarmi che il mio sito funzioni. Nota anche che ho un certo numero di "linee non sicure" che non sono un'idea.

<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>
...

Ma se NON sto usando IIS, il che significa che sto eseguendo la mia app ASP.NET in un contenitore o su Linux, questo verrà ignorato. Dato che sono passato di recente a Linux, ho pensato (peccato per nessun test qui) che avrebbe funzionato.

Il mio sito è ospitato nel servizio app di Azure per Linux, quindi voglio che queste intestazioni vengano restituite allo stesso modo. Ci sono diverse ottime scelte sotto forma di librerie NuGet open source per aiutare. Se utilizzo la pipeline del middleware ASP.NET Core, queste intestazioni verranno emesse e funzioneranno allo stesso modo sia su Windows CHE su Linux.

Userò le librerie di sicurezza NWebsec per ASP.NET Core. Offrono un modo semplice e fluido per aggiungere le intestazioni che voglio.

PER ESSERE CHIARI: Sì, io o tu possiamo aggiungere queste intestazioni manualmente con AddHeader, ma queste semplici librerie assicurano che le nostre virgole e punti e virgola siano corretti. Offrono anche un middleware fortemente tipizzato che è veloce e facile da usare.

Prendendo lo stesso web.config sopra e traducendolo in Configure Pipeline di Startup.cs con NWebSec si presenta così:

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()
)
);

Esiste un'intestazione HTTP sperimentale che NWebSec non supporta (ancora) chiamata Feature-Policy. È un modo in cui il tuo sito Web può dichiarare lato server "il mio sito non consente l'uso della webcam". Ciò impedirebbe a un malintenzionato di iniettare uno script locale che utilizza la webcam o qualche altra funzionalità lato client.

Lo farò manualmente sia per chiarire che posso, ma anche per non essere limitato dalla tua libreria di sicurezza preferita.

NOTA: Un'altra grande libreria di sicurezza è NetEscapades di Andrew Lock che include Feature-Policy e alcune altre fantastiche funzionalità.

Ecco il mio unico middleware che aggiunge semplicemente l'intestazione Feature-Policy a tutte le risposte.

//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();
});

Ora eseguirò il commit, la compilazione e la distribuzione (tutto automatico per me usando Azure DevOps) ed eseguirò nuovamente la scansione del sito:

È stato piuttosto semplice e ha richiesto meno di un'ora. Il tuo chilometraggio può variare, ma questa è l'idea generale!

Sponsor :Proteggi le tue app dal reverse engineering e dalle manomissioni con PreEmptive, creatori di Dotfuscator. Dotfuscator è incluso in Microsoft Visual Studio dal 2003. Menziona HANSELMAN per risparmiare su una licenza professionale!


Linux
  1. Rispecchia il tuo sito Web con rsync

  2. Suggerimenti e trucchi per proteggere il tuo server Web Nginx

  3. Font Finder:cerca e installa facilmente i caratteri Web di Google in Linux

  4. Aggiunta di argomenti e opzioni ai tuoi script Bash

  5. Esecuzione di un'applicazione ASP.NET Core autonoma su Ubuntu

Esplorazione di ASP.NET Core con Docker in entrambi i contenitori Linux e Windows

Aggiunta semplice di intestazioni di sicurezza alla tua app Web ASP.NET Core e ottenere un voto A

Spostamento di un ASP.NET Core dal servizio app di Azure in Windows a Linux eseguendo prima il test in WSL e Docker

Afferma le tue ipotesi:.NET Core e sottili problemi di localizzazione con WSL Ubuntu

Pubblicazione di un sito Web ASP.NET Core su un host di macchine virtuali Linux economico

Internxt:Conserva i Tuoi File e Foto in Totale Privacy e Sicurezza