GNU/Linux >> Znalost Linux >  >> Linux

Snadné přidávání záhlaví zabezpečení do webové aplikace ASP.NET Core a získávání hodnocení A

To je na hovno.

To je můj web podcastu s hodnocením F od SecurityHeaders.com. O co jde? Postaral jsem se o to před měsíci!

Ukázalo se, že jsem nedávno přešel z Windows na Linux v Azure.

Pokud používám IIS v systému Windows, mohu (a udělal jsem) ve svém web.config vytvořit sekci, která vypadá nějak takto.

Všimněte si, že jsem přidal několik vlastních věcí a budete se chtít ujistit, že to NEZKOPIŠÍTE a vložíte. Udělejte si svůj, svůj.

Všimněte si, že jsem přidal na seznam povolených mnoho domén, abych se ujistil, že můj web funguje. Všimněte si také, že mám řadu „nebezpečných řádků“, které nejsou nápadné.

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

Pokud však NEPOUŽÍVÁM IIS – což znamená, že spouštím svou aplikaci ASP.NET v kontejneru nebo na Linuxu – bude to ignorováno. Protože jsem nedávno přešel na Linux, předpokládal jsem (je škoda, že zde nejsou žádné testy), že to prostě bude fungovat.

Můj web je hostován na Azure App Service pro Linux, takže chci, aby se tyto hlavičky vydávaly stejným způsobem. Existuje několik skvělých možností ve formě knihoven Open Source NuGet, které vám pomohou. Pokud použiji middlewarový kanál ASP.NET Core, budou tyto hlavičky vystupovat a fungovat STEJNĚ na Windows I Linuxu.

Budu používat knihovny zabezpečení NWebsec pro ASP.NET Core. Nabízejí jednoduchý plynulý způsob, jak přidat záhlaví, které chci.

ABY BYLO JASNÉ: Ano, já nebo vy můžete tato záhlaví přidat ručně pomocí AddHeader, ale tyto jednoduché knihovny zajišťují, že naše čárky a středníky jsou správné. Nabízejí také silně typovaný middleware, který se rychle a snadno používá.

Vezmeme-li stejný web.config výše a přeložíme jej do Configure Pipeline s NWebSec Startup.cs, vypadá takto:

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

Existuje jedna experimentální hlavička HTTP, kterou NWebSec (zatím) nepodporuje, nazvaná Feature-Policy. Je to způsob, jak váš web může na straně serveru prohlásit „můj web neumožňuje použití webové kamery“. To by zabránilo padouchovi vložit místní skript, který používá webovou kameru nebo jinou funkci na straně klienta.

Udělám to ručně, abych uvedl, že mohu, ale také abyste nebyli omezeni svou bezpečnostní knihovnou.

POZNÁMKA: Další skvělou bezpečnostní knihovnou je NetEscapades Andrewa Locka, která obsahuje Feature-Policy a také některé další skvělé funkce.

Zde je můj jediný Middleware, který ke všem odpovědím pouze přidává záhlaví Feature-Policy.

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

Nyní provedem potvrzení, sestavení a nasazení (všechno automaticky pomocí Azure DevOps) a znovu prohledám web:

Bylo to docela jednoduché a trvalo to méně než hodinu. Váš počet najetých kilometrů se může lišit, ale to je obecná myšlenka!

Sponzor :Chraňte své aplikace před reverzním inženýrstvím a manipulací s PreEmptive, tvůrci Dotfuscator. Dotfuscator je součástí sady Microsoft Visual Studio od roku 2003. Zmiňte HANSELMANA, abyste ušetřili profesionální licenci!


Linux
  1. Zrcadlete svůj web pomocí rsync

  2. Přidání argumentů a voleb do vašich Bash skriptů

  3. Spuštění samostatné aplikace ASP.NET Core na Ubuntu

  1. Tipy a triky pro zabezpečení vašeho webového serveru Nginx

  2. Font Finder – snadné vyhledávání a instalace webových písem Google v systému Linux

  3. WallpaperDownloader – Snadné stahování, správa a změna tapety na plochu

  1. Jak nainstalovat Firefox Quantum a zrychlit prohlížení webu

  2. Zabezpečení vašeho webového serveru Apache pomocí zabezpečení Mod

  3. Objevte CyberPanel a nainstalujte jej k ovládání svého webového hostitele