GNU/Linux >> Tutoriales Linux >  >> Linux

Agregue fácilmente encabezados de seguridad a su aplicación web ASP.NET Core y obtenga una calificación A

Bueno, eso apesta.

Ese es mi sitio web de podcasts con una calificación F de SecurityHeaders.com. ¿Cual es el trato? ¡Me encargué de esto hace meses!

Resulta que recientemente me mudé de Windows a Linux en Azure.

Si estoy usando IIS en Windows, puedo (y lo hice) hacer una sección en mi web.config que se parece a esto.

Tenga en cuenta que he agregado algunas cosas personalizadas y querrá asegurarse de NO copiar y pegar esto. Haz tuyo, tuyo.

Tenga en cuenta que he incluido en la lista blanca un montón de dominios para asegurarme de que mi sitio funcione. También tenga en cuenta que tengo una serie de "líneas inseguras" que no son 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>
...

Pero, si NO estoy usando IIS, lo que significa que estoy ejecutando mi aplicación ASP.NET en un contenedor o en Linux, esto se ignorará. Dado que recientemente me mudé a Linux, asumí (mi error por no haber probado aquí) que simplemente funcionaría.

Mi sitio está alojado en Azure App Service para Linux, por lo que quiero que estos encabezados se muestren de la misma manera. Hay varias opciones excelentes en forma de bibliotecas NuGet de código abierto para ayudar. Si utilizo la canalización de middleware ASP.NET Core, estos encabezados se mostrarán y funcionarán IGUAL en Windows Y Linux.

Usaré las bibliotecas de seguridad de NWebsec para ASP.NET Core. Ofrecen una forma sencilla y fluida de agregar los encabezados que quiero.

PARA SER CLAROS: Sí, yo o usted podemos agregar estos encabezados manualmente con AddHeader, pero estas bibliotecas simples aseguran que nuestras comas y puntos y comas sean correctos. También ofrecen un middleware fuertemente tipado que es rápido y fácil de usar.

Tomando el mismo web.config anterior y traduciéndolo a Configure Pipeline with NWebSec de Startup.cs se ve así:

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

Hay un encabezado HTTP experimental que NWebSec no admite (todavía) llamado Feature-Policy. Es una forma en que su sitio web puede declarar en el lado del servidor "mi sitio no permite el uso de la cámara web". Eso evitaría que un malhechor inyecte un script local que use la cámara web o alguna otra característica del lado del cliente.

Lo haré manualmente tanto para dejar claro que puedo, como para que no estés limitado por la biblioteca de seguridad que elijas.

NOTA: Otra gran biblioteca de seguridad es NetEscapades de Andrew Lock, que incluye Feature-Policy, así como otras funciones excelentes.

Aquí está mi único Middleware que solo agrega el encabezado Feature-Policy a todas las respuestas.

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

Ahora confirmaré, compilaré e implementaré (todo automáticamente para mí usando Azure DevOps) y escanearé el sitio nuevamente:

Eso fue bastante sencillo y tomó menos de una hora. Su millaje puede variar, ¡pero esa es la idea general!

Patrocinador :Proteja sus aplicaciones de la ingeniería inversa y la manipulación con PreEmptive, creadores de Dotfuscator. Dotfuscator ha estado integrado con Microsoft Visual Studio desde 2003. ¡Mencione a HANSELMAN para ahorrar en una licencia profesional!


Linux
  1. Duplique su sitio web con rsync

  2. Consejos y trucos para asegurar su servidor web Nginx

  3. Buscador de fuentes:busque e instale fácilmente las fuentes web de Google en Linux

  4. Agregar argumentos y opciones a sus scripts de Bash

  5. Ejecución de una aplicación ASP.NET Core autónoma en Ubuntu

Exploración de ASP.NET Core con Docker en contenedores de Linux y Windows

Agregue fácilmente encabezados de seguridad a su aplicación web ASP.NET Core y obtenga una calificación A

Mover un ASP.NET Core de Azure App Service en Windows a Linux probando primero en WSL y Docker

Afirme sus suposiciones:.NET Core y problemas locales sutiles con WSL Ubuntu

Publicación de un sitio web ASP.NET Core en un host de máquina virtual Linux económico

Internxt:Conserva Tus Archivos y Fotos con Total Privacidad y Seguridad