Foros del Web » Programando para Internet » PHP »

Se puede evitar robo de sesion?

Estas en el tema de Se puede evitar robo de sesion? en el foro de PHP en Foros del Web. Buenas, Estoy armando un sistema de login de usuarios y me gustaría que fuese seguro en cuanto a la suplantación de identidad. Llevo varias semanas ...
  #1 (permalink)  
Antiguo 25/11/2010, 14:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Se puede evitar robo de sesion?

Buenas,

Estoy armando un sistema de login de usuarios y me gustaría que fuese seguro en cuanto a la suplantación de identidad. Llevo varias semanas leyendo sobre seguridad sobre sesiones y cookies y parece que medio tengo claro cómo securizarlo, pero me gustaría saber vuestra opinión.

Respecto a las sesiones
Cuando usas session_start(), PHP envía al cliente una cookie con una clave de identificación que le permite recordar la sesión.

Si alguien, durante ese instante, está vigilando las comunicaciones del cliente, puede capturar la cookie, reemplazarla en su propio navegador y "fingir" ante PHP que se trata del mismo usuario... esto sería una usurpación de identidad en toda regla.

Cookies
Mismo problema, no?

Intento de solución
La idea es que el PHPSESSID se crea en cada navegador (en forma de cookie, es decir es visible por el cliente) no te puedes fiar solo de él.
En cambio el resto de sesiones que creas en el servidor no aparecen en el navegador del cliente.
Se trata de aprovechar esto y crear un TOKEN único para cada usuario que se conecte y haga login en la web.
Importante, este TOKEN lo guardas también en la Base de Datos.

Por mucho que al usuario le roben el PHPSESSID no pasará nada si en todas nuestras páginas tenemos una comprobación así:

if(!empty($_SESSION['usuario']) && !empty($_SESSION['token']))

Hasta donde sé, no se podría emular por parte de ningún cliente fuera de la aplicación, la creación de un $_SESSION['token'] por la cara, y nuestra sesión ahora estaría segura.

Si pasa esta validación, comprobaríamos que el $_SESSION['token'] coincide con el que hay en la base de datos.

SELECT * FROM usuarios ".
"WHERE usuario = '{$_SESSION['usuario']}' AND ".
"token = '{$_SESSION['token']}'

Fuente: http://blog.amarelloartis.com/2007/0...siones-en-php/

Y aquí es donde más dudo, si el usuario cierra la web las sesiones las perderemos y no sé como hacerlo para que si el usuario marcó recordar contraseña pueda logearse en la web sin pedirle mas datos.

Qué opináis, se os ocurre algo?

Muchas gracias de antemano!

Etiquetas: robo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:06.