GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einfaches Hinzufügen von Sicherheitsheadern zu Ihrer ASP.NET Core-Web-App und Erzielen einer A-Note

Nun, das ist scheiße.

Das ist meine Podcast-Website mit F-Bewertung von SecurityHeaders.com. Was ist das Problem? Ich habe mich vor Monaten darum gekümmert!

Es stellte sich heraus, dass ich kürzlich von Windows zu Linux auf Azure gewechselt bin.

Wenn ich IIS unter Windows verwende, kann (und habe) ich einen Abschnitt in meiner web.config erstellen, der in etwa so aussieht.

Beachten Sie, dass ich ein paar benutzerdefinierte Dinge hinzugefügt habe, und Sie sollten sicherstellen, dass Sie dies NICHT einfach kopieren und einfügen. Mach deins, deins.

Beachten Sie, dass ich eine Reihe von Domains auf die weiße Liste gesetzt habe, um sicherzustellen, dass meine Website funktioniert. Beachten Sie auch, dass ich eine Reihe von "unsicheren Inlines" habe, die keine Idee sind.

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

Aber wenn ich IIS NICHT verwende – was bedeutet, dass ich meine ASP.NET-App in einem Container oder unter Linux ausführe – wird dies ignoriert. Da ich vor kurzem auf Linux umgestiegen bin, bin ich davon ausgegangen (meine Schuld für keine Tests hier), dass es einfach funktionieren würde.

Meine Website wird auf Azure App Service für Linux gehostet, daher möchte ich, dass diese Header auf die gleiche Weise ausgegeben werden. Es gibt mehrere großartige Möglichkeiten in Form von Open-Source-NuGet-Bibliotheken, um zu helfen. Wenn ich die ASP.NET Core-Middleware-Pipeline verwende, werden diese Header ausgegeben und funktionieren sowohl unter Windows als auch unter Linux GLEICH.

Ich verwende die NWebsec-Sicherheitsbibliotheken für ASP.NET Core. Sie bieten eine einfache, fließende Möglichkeit, die gewünschten Header hinzuzufügen.

ZUKLÄRUNG: Ja, ich oder Sie können diese Header manuell mit AddHeader hinzufügen, aber diese einfachen Bibliotheken stellen sicher, dass unsere Kommas und Semikolons korrekt sind. Sie bieten auch eine stark typisierte Middleware, die schnell und einfach zu verwenden ist.

Nimmt man die gleiche web.config oben und übersetzt sie in die Configure Pipeline von Startup.cs mit NWebSec, sieht das so aus:

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

Es gibt einen experimentellen HTTP-Header namens Feature-Policy, den NWebSec (noch) nicht unterstützt. Auf diese Weise kann Ihre Website serverseitig erklären, dass „meine Website die Verwendung der Webcam nicht zulässt“. Das würde einen Angreifer daran hindern, ein lokales Skript einzuschleusen, das die Webcam oder eine andere clientseitige Funktion verwendet.

Ich werde es manuell tun, um deutlich zu machen, dass ich es kann, aber auch, dass Sie nicht durch die Sicherheitsbibliothek Ihrer Wahl eingeschränkt sind.

HINWEIS: Eine weitere großartige Sicherheitsbibliothek ist NetEscapades von Andrew Lock, die Feature-Policy sowie einige andere großartige Funktionen enthält.

Hier ist meine einzige Middleware, die allen Antworten einfach den Feature-Policy-Header hinzufügt.

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

Jetzt übergebe ich, erstelle und stelle sie bereit (alles automatisch für mich mit Azure DevOps) und scanne die Website erneut:

Das war ziemlich einfach und dauerte weniger als eine Stunde. Ihr Kilometerstand kann variieren, aber das ist die allgemeine Idee!

Sponsor :Schützen Sie Ihre Apps vor Reverse Engineering und Manipulation mit PreEmptive, den Herstellern von Dotfuscator. Dotfuscator ist seit 2003 in Microsoft Visual Studio integriert. Erwähnen Sie HANSELMAN für Einsparungen bei einer professionellen Lizenz!


Linux
  1. Spiegeln Sie Ihre Website mit rsync

  2. Tipps und Tricks zum Sichern Ihres Nginx-Webservers

  3. Font Finder – Einfaches Suchen und Installieren von Google Webfonts unter Linux

  4. Hinzufügen von Argumenten und Optionen zu Ihren Bash-Skripten

  5. Ausführen einer eigenständigen ASP.NET Core-Anwendung auf Ubuntu

Erkunden von ASP.NET Core mit Docker in Linux- und Windows-Containern

Einfaches Hinzufügen von Sicherheitsheadern zu Ihrer ASP.NET Core-Web-App und Erzielen einer A-Note

Verschieben eines ASP.NET Core von Azure App Service unter Windows zu Linux, indem zuerst in WSL und Docker getestet wird

Bestätigen Sie Ihre Annahmen – .NET Core und subtile Gebietsschemaprobleme mit WSLs Ubuntu

Veröffentlichen einer ASP.NET Core-Website auf einem günstigen Linux-VM-Host

Internxt:Bewahren Sie Ihre Dateien und Fotos in absoluter Privatsphäre und Sicherheit auf