Ver Mensaje Individual
  #10 (permalink)  
Antiguo 18/03/2013, 12:01
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda session hijacking

Bueno como te digo nemutagk no hay nada 100% seguro sobre sesiones y hijacking , ahora como yo lo veo si a un usuario le roban las cookies saben su ip la id de session el user-agent y tal cres que es por una mala seguridad de la web o por una mala seguridad por parte del usuario ? ahora bien la web intentara en todo lo posible que si eso sucede no puedan autentificarse como ese usuario cualquier persona no autorizada .

- ese hash claro que es vulnerable yo solo te lo expuse como ejemplo pero ademas te especifique en otro mensaje posterior " es necesario añadir el id de session y añadirlo a la cadena , una vez echo esto , despues de una peticion se comprueba la cadena con la de la bd si es correcta volmenos a generar un nuevo session_id y un nuevo token y la cookie volvemos a guardarlo y asi sucesivamente "

ahora bien vamos a plantearlo de nuevo pero mas seguro.

login

// realizamos las verificaciones y consultas pertinentes y declaramos las sessiones
Código PHP:
Ver original
  1. $rand         = rand();
  2. $token        = hash('whirpool',session_id().$rand);
  3. $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);
  4.  
  5. // guardamos en la bd del usuario sus credenciales
  6. // y guardamos en la cookie el rand
  7.  
  8. setcookie("dmz_", base64_encode($rand));

comprobacion en todas las peticiones (paginas)
Código PHP:
Ver original
  1. if(isset($_COOKIE['dmz_']))
  2. {
  3.     $rand         = base64_decode($_COOKIE['dmz_']);
  4.     $token        = hash('whirpool',session_id().$rand);
  5.     $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);
  6.      
  7.     // realizamos una consulta en la bd y extraemos los credenciales guardados en el login y comparamos
  8.  
  9.     if($row['cadena'] == $credenciales)
  10.     {
  11.         // si es correcto generamos un nuevo session id y un nuevo rand y volvemos a guardar los credenciales
  12.  
  13.         session_regenerate_id();
  14.  
  15.         $rand         = rand();
  16.         $token        = hash('whirpool',session_id().$rand);
  17.         $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);
  18.  
  19.         // guardamos en la bd del usuario sus credenciales
  20.         // y guardamos en la cookie el rand
  21.  
  22.         setcookie("dmz_", base64_encode($rand));
  23.     }
  24.     else
  25.     {
  26.         exit('session hijacking');
  27.     }
  28. }

el hash es para comparar los hashes resultantes aqui lo importante es regenerar el id de session como medida de seguridad hijacking

aqui ademas te dejo un link de owasp de administracion de sessiones donde tambien se habla de hijacking

https://www.owasp.org/index.php/Sess...nt_Cheat_Sheet