Hace unos 6 meses, implementé un sitio donde cada solicitud tenía que estar por encima de https. La única forma en el momento en que pude encontrar para asegurarme de que cada solicitud a una página fuera a través de https era verificarla en el evento de carga de la página. Si la solicitud no fuera superior a http, respondería.redirect (" https://example.com ")
¿Hay una mejor manera, idealmente alguna configuración en web.config?
Respuestas:
Utilice HSTS (Seguridad de transporte estricta de HTTP)
de http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Respuesta original (reemplazada por la anterior el 4 de diciembre de 2015)
básicamente
eso iría en global.asax.cs (o global.asax.vb)
No conozco una forma de especificarlo en web.config
fuente
La otra cosa que puede hacer es usar HSTS devolviendo el encabezado "Strict-Transport-Security" al navegador. El navegador debe admitir esto (y en la actualidad, lo hacen principalmente Chrome y Firefox), pero significa que una vez configurado, el navegador no realizará solicitudes al sitio a través de HTTP y en su lugar las traducirá a solicitudes HTTPS antes de emitirlas. . Pruebe esto en combinación con una redirección desde HTTP:
Los navegadores que no son conscientes de HSTS simplemente ignorarán el encabezado pero aún así serán atrapados por la declaración de cambio y enviados a HTTPS.
fuente
if(!Request.IsLocal)
para que no interrumpa la depuración.El módulo IIS7 le permitirá redirigir.
fuente
Para aquellos que usan ASP.NET MVC. Puede usar lo siguiente para forzar SSL / TLS a través de HTTPS en todo el sitio de dos maneras:
El camino difícil
1 - Agregue RequireHttpsAttribute a los filtros globales:
2 - Forzar tokens antifalsificación para usar SSL / TLS:
3 - Exigir que las cookies requieran HTTPS de forma predeterminada cambiando el archivo Web.config:
4 - Use el paquete NWebSec.Owin NuGet y agregue la siguiente línea de código para habilitar Strict Transport Security en todo el sitio. No olvide agregar la directiva de precarga a continuación y enviar su sitio al sitio de precarga de HSTS . Más información aquí y aquí . Tenga en cuenta que si no está utilizando OWIN, hay un método Web.config que puede leer en el sitio NWebSec .
5 - Use el paquete NWebSec.Owin NuGet y agregue la siguiente línea de código para habilitar la fijación de clave pública (HPKP) en todo el sitio. Más información aquí y aquí .
6 - Incluya el esquema https en cualquier URL utilizada. El encabezado HTTP de la Política de seguridad de contenido (CSP) y la Integridad de recursos secundarios (SRI) no funcionan bien cuando se imita el esquema en algunos navegadores. Es mejor ser explícito sobre HTTPS. p.ej
La manera fácil
Use la plantilla de proyecto ASP.NET MVC Boilerplate Visual Studio para generar un proyecto con todo esto y mucho más integrado. También puede ver el código en GitHub .
fuente
<authentication mode="Forms">
, debe tener dentro<forms requireSSL="true">
RequireHttpsAttribute
hace la redirección. Mientras tengas eso, debería estar bien.Si no puede configurar esto en IIS por cualquier razón, crearía un módulo HTTP que haga la redirección por usted:
Luego, compílelo en un archivo DLL, agréguelo como referencia a su proyecto y colóquelo en web.config:
fuente
app.BeginRequest += new OnBeginRequest;
en elInit
método y en elOnBeginRequest
que contiene qué corrienteInit
que contiene el método . ¿Estás seguro de que este módulo funciona como se esperaba?Lo que debes hacer es:
1) Agregue una clave dentro de web.config, dependiendo de la producción o el servidor de escenario como se muestra a continuación
2) Dentro de su archivo Global.asax agregue el siguiente método.
fuente
Si el soporte SSL no es configurable en su sitio (es decir, debería poder activar / desactivar https), puede usar el atributo [RequireHttps] en cualquier controlador / acción de controlador que desee asegurar.
fuente
También depende de la marca de su equilibrador, para el mux web, necesitaría buscar el encabezado http
X-WebMux-SSL-termination: true
para calcular que el tráfico entrante era ssl. detalles aquí: http://www.cainetworks.com/support/redirect2ssl.htmlfuente
Para @Joe arriba, "Esto me está dando un bucle de redirección. Antes de agregar el código funcionó bien. ¿Alguna sugerencia? - Joe Nov 8 '11 a las 4:13"
Esto también me estaba sucediendo a mí y lo que creo que estaba sucediendo es que había un equilibrador de carga que finalizaba la solicitud SSL frente al servidor web. Por lo tanto, mi sitio web siempre pensaba que la solicitud era "http", incluso si el navegador original solicitaba que fuera "https".
Admito que esto es un poco extraño, pero lo que funcionó para mí fue implementar una propiedad "JustRedirected" que podría aprovechar para descubrir que la persona ya fue redirigida una vez. Por lo tanto, pruebo las condiciones específicas que justifican la redirección y, si se cumplen, establezco esta propiedad (valor almacenado en la sesión) antes de la redirección. Incluso si las condiciones http / https para la redirección se cumplen la segunda vez, omito la lógica de redirección y restablezco el valor de sesión "JustRedirected" a falso. Necesitará su propia lógica de prueba condicional, pero aquí hay una implementación simple de la propiedad:
fuente
Voy a tirar mis dos centavos. SI tiene acceso al lado del servidor IIS, puede forzar HTTPS mediante el uso de enlaces de protocolo. Por ejemplo, tiene un sitio web llamado Blah . En IIS, configuraría dos sitios: Blah y Blah (Redirect) . Para Blah, solo configure el
HTTPS
enlace (yFTP
si es necesario, asegúrese de forzarlo también a través de una conexión segura). Para Blah (Redirect) solo configure elHTTP
enlace. Por último, en la sección HTTP Redirect para la Blah (Redirect), de lo asegúrese de establecer una redirección 301 ahttps://blah.com
, con el destino exacto habilitado. Asegúrese de que cada sitio en IIS señale que espropia carpeta raíz, de lo contrario, el Web.config se arruinará. También asegúrese de haberHSTS
configurado en su sitio HTTPS para que las solicitudes posteriores del navegador siempre se vean obligadas a HTTPS y no se produzcan redireccionamientos.fuente
Esta es una respuesta más completa basada en @Troy Hunt's. Agregue esta función a su
WebApplication
clase enGlobal.asax.cs
:(Para habilitar SSL en su compilación local, habilítelo en el Dock de Propiedades para el proyecto)
fuente
-> Simplemente AGREGAR [RequireHttps] en la parte superior de la clase pública HomeController: Controlador.
-> Y agregue GlobalFilters.Filters.Add (nuevo RequireHttpsAttribute ()); en el método 'vacío protegido Application_Start ()' en el archivo Global.asax.cs.
Lo que obliga a toda su aplicación a HTTPS.
fuente
Pasé algún tiempo buscando las mejores prácticas que tengan sentido y encontré lo siguiente que funcionó perfectamente para mí. Espero que esto te salve alguna vez.
Uso del archivo de configuración (por ejemplo, un sitio web asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- mayor/
o en su propio servidor https://www.sslshopper.com/iis7-redirect-http-to-https.html
[RESPUESTA CORTA] Simplemente el siguiente código va dentro
fuente
En IIS10 (Windows 10 y Server 2016), desde la versión 1709 en adelante, hay una nueva opción más simple para habilitar HSTS para un sitio web.
Microsoft describe las ventajas del nuevo enfoque aquí , y proporciona muchos ejemplos diferentes de cómo implementar el cambio mediante programación o editando directamente el archivo ApplicationHost.config (que es como web.config pero funciona a nivel de IIS, en lugar de a nivel de sitio individual) ) ApplicationHost.config se puede encontrar en C: \ Windows \ System32 \ inetsrv \ config.
He esbozado dos de los métodos de ejemplo aquí para evitar la pudrición del enlace.
Método 1 : edite el archivo ApplicationHost.config directamente Entre las
<site>
etiquetas, agregue esta línea:Método 2 : línea de comandos: ejecute lo siguiente desde un símbolo del sistema elevado (es decir, el mouse derecho en CMD y ejecútelo como administrador). Recuerde cambiar Contoso con el nombre de su sitio como aparece en el Administrador de IIS.
Los otros métodos que ofrece Microsoft en esos artículos podrían ser mejores opciones si se encuentra en un entorno alojado donde tiene acceso limitado.
Tenga en cuenta que IIS10 versión 1709 está disponible en Windows 10 ahora, pero para Windows Server 2016 está en una pista de lanzamiento diferente, y no se lanzará como un parche o paquete de servicio. Ver aquí para más detalles sobre 1709.
fuente
Si está utilizando ASP.NET Core, puede probar el paquete nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Entonces solo necesitas agregar
Esto también agregará el encabezado HTTP StrictTransportSecurity a todas las solicitudes realizadas utilizando el esquema https.
Código de ejemplo y documentación https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
fuente