Publicado el 16.01.2021 a las 15:54
En este artículo vamos a ponérselo más complicado a los hackers comprometer nuestro sitio web de ASP.NET, ya sea una aplicación MVC, API REST, Core...
Los customs HTTP headers es información adicional a la solicitada por el cliente web que se manda desde el servidor.
Normalmente esta información no es relevante para un usuario estándar, pero sí lo será para los desarrolladores y en ocasiones estos customs HTTP headers solventará algún que otro problema.
Actualmente analizo mis sitio creados con ASP.NET en securityheaders.com
Es muy fácil de utilizar, introduces la URL de tu sitio y te da un análisis y te categoriza tu sitio con si fuera la categoría energética de un electrodoméstico.
A continuación te voy a enumerar los customs HTTP headers que son fácilmente configurables y que todo desarrollador de ASP.NET debería implementar.
Este custom HTTP header garantiza que los hackers no hagan iframe en tu sitio para que no te lleven a sitios no deseados.
Si utilizas ASP.NET MVC 5 o alguno más reciente, este custom header se añade automáticamente, si no es tu caso y tu sitio es anterior es muy fácil añadir este custom HTTP header al web.config:
<system.webServer> <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="DENY" /> </customHeaders> </httpProtocol> </system.webServer>
El x-xss-protection es una característica de los navegadores modernos. Parará la carga del sitio cuando se detecte un ataque cross-site scripting. Para añadirlo será tan fácil como añadir en el web.config:
<system.webServer> <httpProtocol> <customHeaders> <add name="X-Xss-Protection" value="1; mode=block" /> </customHeaders> </httpProtocol> </system.webServer>
Si el valor es 1 quiere decir que se activa la protección
Ayudará a que les resulte más difícil a los hackers identificar el tipo de MIME inspeccionando el contenido. Se añade fácilmente en el web.config:
<system.webServer> <httpProtocol> <customHeaders> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders> </httpProtocol> </system.webServer>
Los navegadores agregan automáticamente el encabezado Referer, cuando un usuario hace clic en un enlace en su sitio. Esto significa que un sitio web vinculado podrá ver de dónde vienen los usuarios. Si bien esta es una función excelente para Analytics, es posible que tenga información confidencial en sus URL, que no desea reenviar a otros dominios. Para eliminar la referencia por completo, agregue el siguiente encabezado a web.config:
<system.webServer> <httpProtocol> <customHeaders> <add name="Referrer-Policy" value="no-referrer" /> </customHeaders> </httpProtocol> </system.webServer>
Existe varios valores posibles para este custom HTTP header. Puedes ver todos los valores posibles en referrer-policy de mozilla.org
Este header deshabilitará el uso de Flash en solicitudes de origen cruzado. Agregue en el web.config:
<system.webServer> <httpProtocol> <customHeaders> <add name="X-Permitted-Cross-Domain-Policies" value="none" /> </customHeaders> </httpProtocol> </system.webServer>
Si no ha implementado HTTPS en su sitio web, debería hacerlo.
Después de hacerlo, puede evitar que se produzca cualquier comunicación a través de HTTP utilizando el encabezado Strict-Transport-Security:
<system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" /> </customHeaders> </httpProtocol> </system.webServer>
El max-age indica a los navegadores que utilicen esta configuración durante el número de segundos especificado. En este caso un año. La parte includeSubDomains puede excluirse si aloja sitios web que no son HTTPS en subdominios (como un blog).
Este header es añadido automáticamente por ASP.NET. Para no dar pistar a posibles atacantes sobre qué tecnología está corriendo tu sitio, se debería de eliminar este header:
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Al igual que X-Powered-By, X-AspNetMvc-Version es un header agregado automáticamente por ASP.NET. Para evitar decirle a los hackers que usa MVC y qué versión, debe eliminarlo.
X-AspNetMvc-Version no se puede eliminar a través de web.config, pero puede deshabilitarlo desde el código. Agregue lo siguiente a su Startup.cs o Global.asax.cs:
MvcHandler.DisableMvcResponseHeader = true;
ASP.NET también revela el servidor que aloja la aplicación. Si un hacker sabe que está utilizando IIS, esto reduce la cantidad de debilidades que debe probar. Para eliminar el encabezado del servidor, elimínelo del código en un filtro o mediante Global.asax.cs:
protected void Application_PreSendRequestHeaders() { if (HttpContext.Current != null) { HttpContext.Current.Response.Headers.Remove("Server"); } }
Este header queda pendiente para otro artículo.
Aquí tienes un resumen de todos los customs HTTP headers que deberías implementar:
<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 'self' https://fonts.googleapis.com/ https://fonts.gstatic.com/ 'unsafe-inline';" /> <add name="Referrer-Policy" value="no-referrer-when-downgrade"/> <add name="Permissions-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>
Hasta luego 🖖