2011-02-24 34 views
6

Recientemente leí un artículo sobre cómo hacer que las sesiones ASP.NET sean más seguras here y al principio me parece realmente útil.Evitar el secuestro de sesión en ASP.NET

Anteriormente había estado almacenando la dirección IP del usuario en la sesión, y luego me aseguré en cada solicitud posterior de que la IP solicitante era igual a la IP almacenada.

El código en el artículo también protege la sesión al verificar la dirección IP, excepto que almacena un código de autenticación hash que contiene la IP del usuario como parte de la cookie de sesión. Crea un MAC con hash dos veces cada solicitud, lo que imagino que desaceleraría un poco las cosas.

Ya puedo ver un error potencial en su código: si de alguna manera se apoderara de la clave utilizada para generar el MAC, podría generar un MAC válido con su propia IP, ni siquiera tendría para simular el IP en el que se inició la sesión.

Parece una solución demasiado compleja para un problema simple que no solo provoca una sobrecarga mayor, sino que también es más susceptible al ataque que el método trivial, a menos que esté completamente perdido el punto.

Entonces, ¿por qué este enfoque sería más seguro que el enfoque más simple que he estado usando?

Como comentario adicional, el autor también afirma que no debe usar toda la dirección IP en la comparación, ya que las IP de algunos usuarios cambian cada solicitud si están detrás de un proxy. ¿Sigue siendo así si comprueba X_FORWARDED_FOR?

Gracias!

+0

En una nota al margen: asegúrese de evitar el uso de sesiones sin cookies, ya que la ID de la sesión se almacena directamente en la URL. –

+0

Realmente escaparatismo, ya que obtener un código de sesión de una cookie es trivial. Pero tener largas ID de sesión en una url es espantoso de todos modos y causa otros problemas, como si las personas marcan como favoritos o comparten un enlace. –

Respuesta

6

ver este mensaje: What is the best way to prevent session hijacking?

Básicamente, se debe utilizar HTTPS en la página de inicio de sesión y otras "zonas sensibles".

+0

+1 .. dado que cualquier adolescente puede robar sin pensar las sesiones de personas en una cafetería con esto: http://news.softpedia.com/news/Firefox-Extension-Allows-Anyone-to-Steal-Logins-over-Insecure -Wireless-Networks-162755.shtml ... si te importa, esta es la única manera. En realidad, https de extremo a extremo es la única forma de protegerse contra este tipo de ataque. Y aún debe usar códigos cifrados o largos/aleatorios para identificar una sesión. –

+0

Gracias. Sé que, idealmente, debería usar HTTPS, pero mi pregunta sigue en pie: ¿por qué le molestan a todos los MAC si ni siquiera es tan fácil como la manera fácil? – stewartml

+0

Estoy marcando esto como una respuesta, básicamente parece que cualquier forma de hacerlo no es tan buena como su método sugerido, por lo que mi pregunta realmente no importa. – stewartml

Cuestiones relacionadas