asp.net uso requireSSL y aún así ser capaz de comprobar si el usuario se autentica en las páginas que no son SSL

StackOverflow https://stackoverflow.com/questions/4546682

Pregunta

Tengo una aplicación web (asp.net 3.5) con SSL mixta. Todas las páginas relacionadas con la cuenta se entregan a través de SSL. En su mayoría todas las demás páginas se entregan a través no SSL. Para cambiar automáticamente entre HTTPS y HTTP utilizo este componente . Últimamente hubo una noticia respecto a la capacidad toch secuestrar sesiones de usuario en redes WiFi no seguras. Esto debería ser posible por la captura de la cookie que se transmite a través de conexiones no SSL.

Esto me provocó a revisar mis opciones de seguridad en esta aplicación web. (De nuevo) me consiguió este artículo de MSDN y probamos la requireSSL = true en mi propiedad FormsAuthentication. Antes incluso he empecé la aplicación web me di cuenta de que mi User.Identity será nula en las páginas que no son SSL debido a que la cookie que contiene esta información no se envía desde y hacia el navegador web.

necesito un mecanismo que autentica al usuario a través de una conexión SSL ... y recuerda que esta información de autenticación, incluso en las páginas que no son SSL.

Si bien la búsqueda SO, he encontrado este post . Es, me parece que esta es una buena solución. Pero, me pregunto si una solución se puede encontrar en el almacenamiento de datos de acceso en el sessionState? Estoy pensando en agarrar la Application_AuthenticateRequest en el Global.asax. Verificando la conexión es segura y comprobar ya sea el authcookie o sesión. No sé exactamente cómo voy a poner en práctica esto todavía. Tal vez se pueda imaginar conmigo en esto?

¿Fue útil?

Solución

Por desgracia, has requisitos contradictorios. No se puede tener más de una sesión segura no SSL, por lo que me gustaría desafiar a su supuesto subyacente: ¿por qué no tener todo el SSL uso del sitio

Otros consejos

A partir de la MVC FAQ (pregunta similar contestado por el gurú de la seguridad Levi) pidiendo un atributo de no utilizar SSL.

• Los RequireHttps [] atributo se pueden utilizar en un tipo de controlador o método de acción al decir "esto sólo se puede acceder a través de SSL." solicitudes que no son SSL al controlador o acción serán redirigidos a la versión SSL (si un HTTP GET) o rechazados (si un HTTP POST). Puede anular la RequireHttpsAttribute y cambiar este comportamiento si lo desea. No hay [RequireHttp] atributo incorporado que hace lo contrario, pero se puede hacer fácilmente su propio si lo desea.

También hay sobrecargas de Html.ActionLink () que toma un parámetro de protocolo; puede especificar "http" o "https" explícitamente como el protocolo. Aquí está la documentación de MSDN en una de esas sobrecarga. Si no se especifica un protocolo o si se llama a una sobrecarga que no tiene un parámetro de protocolo, se asume que el enlace querido tener el mismo protocolo que la solicitud actual.

La razón por la que no tenemos un atributo [RequireHttp] en MVC es que realmente no hay mucho beneficio a la misma. No es tan interesante como [RequireHttps], y se anima a los usuarios a hacer lo incorrecto. Por ejemplo, muchos sitios Web Conectarse a través de SSL y redirigir de nuevo a HTTP después de que haya entrado en el sistema, lo cual es absolutamente lo peor que puede hacer. La cookie de inicio de sesión es tan secreta como su nombre de usuario + contraseña, y ahora va a enviar en texto sin cifrar a través del cable. Además, ya ha tomado el tiempo para realizar el apretón de manos y asegurar el canal (que es la mayor parte de lo que hace más lento que HTTPS HTTP) antes de la tubería MVC se ejecuta, por lo [RequireHttp] no hacer la solicitud o en el futuro actual solicitudes mucho más rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top