ASP.NET MVC's RequireHttps solo va en una dirección. En el pasado me acaba de crear mi propia aplicación FilterAttribute para permitir viajes en ambos sentidos:
EnsureHttpsAttribute
public class EnsureHttpsAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
Verify.NotNull(filterContext, "filterContext");
Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");
var request = filterContext.HttpContext.Request;
if (request.Url != null && !request.IsSecureConnection && !request.IsLocal)
filterContext.Result = new RedirectResult("https://" + request.Url.Host + request.RawUrl);
}
}
EnsureHttpAttribute
public class EnsureHttpAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
Verify.NotNull(filterContext, "filterContext");
Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");
var request = filterContext.HttpContext.Request;
if (request.Url != null && request.IsSecureConnection)
filterContext.Result = new RedirectResult("http://" + request.Url.Host + request.RawUrl);
}
}
Casi la misma implementación que RequireHttpsAttribute si la memoria no sirve ; aunque la implementación anterior comprueba si se trata de una solicitud Local
e ignora el cambio a HTTPS.
vez que el usuario ha navegado a través requirehttps, si regresan a un controlador sin requirehttps que todavía estará bajo el https. –
¿por qué volver al http simple? Existe un gran riesgo de seguridad allí, primero se transmiten los tokens de autenticación de formularios y los identificadores de sesión pueden ser olfateados fácilmente. Use RequireSsl en sus formularios auth (si lo está usando) pero a su vez la nota en cualquier lugar que no sea ssl fallará. Ejecute todo su sitio ssl + comprenda cuán fácil es robar una sesión de un único paquete http registrado. –
@AdamTuliper Actualmente no tengo/necesito ninguna autenticación. Estoy usando esto para una solicitud de empleo. Una vez que se envía esto, no tiene sentido encriptar su navegación por más tiempo. No guardo nada en la sesión. Nuestro servidor web está creciendo en edad, por lo que cualquier cosa que pueda hacer para aliviar la carga es necesaria, por lo tanto, si ya no NECESITO ssl, ¿para qué molestarse? Dudo que el cifrado vaya a atascar la máquina, pero supongo que no lo usaría donde no fuera necesario, ya que el cifrado de recursos no es gratuito. – Jared