2009-07-21 19 views
8

Conozco la manera fácil de acceder a una página SSL en ASP.NET MVC - a través del [RequireSSL] attribute pero estoy un poco confundido a la mejor manera de hacer lo opuesto.¿Cómo hago lo CONTRARIO de [RequireHttps (Redirect = true)] en ASP.NET MVC

Tengo muchos enlaces en mi sitio en una barra de encabezado y la mayoría de esos enlaces no requieren SSL y aún no quiero usar SSL.

El proyecto de futuros hace que sea muy fácil redirigir automáticamente a una página SSL con [RequireSSL(Redirect=true)], pero no parece que sea fácil salir de este contexto y volver a redirigir automáticamente a http.

¿Qué me estoy perdiendo?

+1

tenga en cuenta que se cambió el nombre a RequireHttps en MVC 2 –

Respuesta

4

No le falta nada; no hay una funcionalidad lista para usar. Puede crear fácilmente el suyo tomando the RequireSslAttribute source y modificándolo.

+0

¿Tiene sentido hacer esto? No puedo ver ningún problema con él, pero luego me pregunto por qué no es una función estándar. ¿Voy a obtener esos molestos errores de "ha sido redirigido a una página insegura"? –

+4

No es una función estándar porque no hay suficiente incentivo para incluirla. Del mismo modo, [RequireSsl] no se ha movido fuera de los futuros y en el binario principal porque, a pesar de que se ha probado, todavía no ha pasado por la especificación, revisión y documentación. Si le preocupan las advertencias, quizás lo mejor sea generar enlaces HTTP en lugar de enlaces HTTPS en primer lugar. Hay sobrecargas Html.ActionLink() que aceptan un protocolo como parámetro. – Levi

0

Esto vale la pena leer (epecially a darse cuenta de las implicaciones de seguridad de conmutación por descuido de nuevo a http de https:

Partially SSL Secured Web Apps With ASP.NET - no MVC específica pero relevante problemas de seguridad

Partial SSL Website with ASP.NET MVC - MVC amigable

En general, es un tema bastante complicado. Todavía no he encontrado una solución verdadera para todo lo que quiero hacer, pero pensé que estos artículos podrían ayudar a otros.

1

respuesta a una pregunta de duplicados en otra parte:

How to step out from https to http mode in asp.net mvc.

PRECAUCIÓN: Si la elección de utilizar este método la cookie de autenticación se envía a través de texto plano después de cambiar de nuevo a HTTP, y potencialmente pueden ser robados y utilizados por alguien más. See this. En otras palabras, si estuviera usando esto para un sitio bancario, necesitaría asegurarse de que cambiar a http fuera , primero, registrar al usuario.

public class DoesNotRequireSSL: ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
       var request = filterContext.HttpContext.Request; 
       var response = filterContext.HttpContext.Response; 

       if (request.IsSecureConnection && !request.IsLocal) 
       { 
       string redirectUrl = request.Url.ToString().Replace("https:", "http:"); 
       response.Redirect(redirectUrl); 
       } 
       base.OnActionExecuting(filterContext); 
     } 
    } 
Cuestiones relacionadas