Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: RevolucionVegana en 28 Enero 2017, 19:29 pm



Título: ¿Son seguras las sesiones?
Publicado por: RevolucionVegana en 28 Enero 2017, 19:29 pm
Hola a todos me preguntaba como de seguras son las $_SESSION en PHP llevo un tiempo utilizandolas y la verdad que me parecen muy fáciles de vulnerar, es cosa de que yo no le añado algo de seguridad que todo el mundo sabe, son inseguras o como va el tema, o hay que generar algún número aleatorio y asignarle un tiempo o alguna historia de esas, tengo curiosidad ya que creo que son bastante inseguras quizás me equivoque pero esa es la impresión que me da, muchas gracias y un saludo a todos!!


Título: Re: ¿Son seguras las sesiones?
Publicado por: engel lex en 29 Enero 2017, 00:35 am
la sesión standard de php genera un phpid al azar y se guarda en RAM, si está presente la id con el identificador, saca la info de la ram y la carga

la cosa es que si copian la cookie accederán a esa sesión... sin embargo, adivinar una cookie invalida es virtualmente imposible

para reforzar la seguridad generas un id, tomas el user agent, y buscas algún otro browser fingerprint, con todo eso haces un hash+salt y lo guardas como id... cada vez que se acceda, si coincide, se abre la sesión, así aunque roben la cookie, si no coincide el navegador, no se accede


Título: Re: ¿Son seguras las sesiones?
Publicado por: danny920825 en 31 Enero 2017, 14:42 pm
Pero una pregunta... ¿Que tan posible es que alguien te copie una session para usarla en su navegador? O sea, ¿Con que frecuencia pasan esas cosas?
Todos los sistemas son inseguros en cierta medida y hay cosas que no se pueden controlar. Sé que debemos buscar la mayor seguridad, pero hay cosas que son extremas no? Eso es como decir que la contraseña de cada usuario será generada y con una longitud de 100 caracteres, que no se puede cambiar.


Título: Re: ¿Son seguras las sesiones?
Publicado por: engel lex en 31 Enero 2017, 16:25 pm
Citar
Pero una pregunta... ¿Que tan posible es que alguien te copie una session para usarla en su navegador?


si usas la sesiçon basica es bastante facil, puedes probarlo usando por ejemplo 2 compus con chrome y un server local

incias sesión en una pc, allí entras a la consola de programador (F12 usualmente) y escribes

Código:
document.cookie

anotas el contenido que te muestra

luego te vas a la otra pc, y en la consola colocas

Código:
document.cookie = contenido

siendo "contenido" lo que anotaste de la otra pc

y verás que la sesión está iniciada de manera identica... felicitaciones en este punto hiciste tu primer hacking! robar una sesión...

por eso se deben usar metodos agregados como los que indiqué, eso casusará que el sistema detecte que la cookie no proviene de ese ordenador y evite este robo


Título: Re: ¿Son seguras las sesiones?
Publicado por: danny920825 en 31 Enero 2017, 21:24 pm
Ahora... las sessiones son cookies que se guardan en el servidor, a diferencia de las cookies normales. Siendo así, no debería ser más seguro que una cookie normal? O sea, es tan simple como hacer eso y puedes tomar el lugar del administrador si no tomó las medidas necesarias?


Título: Re: ¿Son seguras las sesiones?
Publicado por: engel lex en 31 Enero 2017, 21:31 pm
Ahora... las sessiones son cookies que se guardan en el servidor, a diferencia de las cookies normales.

las sesiones son cookies normales, no hay otro tipo de cookies... las cookies normalmente no contienen info, sino que contienen identificadores para el servidor, abre tus cookies y velo tu mismo

Citar
O sea, es tan simple como hacer eso y puedes tomar el lugar del administrador si no tomó las medidas necesarias?

si no tomo las medidas necesarias claramente habrá huecos de seguridad... por eso son "las medidas necesarias"...


Título: Re: ¿Son seguras las sesiones?
Publicado por: danny920825 en 1 Febrero 2017, 00:29 am
Entonces creo que es momento de hacer una pregunta tonta. Digo tonta porque supongo que no, pero alguien me dijo una vez que en programación hay más de una forma de hacer algo.
Hay forma de crear usuarios y que estos tengan roles dentro del sistema sin utilizar $_SESSION para comparar luego en la BD los niveles de acceso?

O sea, yo comparo:
Código
  1. include = "bd.php";
  2. if(!isset($SESSION['user_id']))
  3. {
  4.   //si no existe la cookie de id de usuario, lo mando a loguearse
  5.   header("location:login.php");
  6. }
  7. else
  8. {
  9. //comprobar que el user_id exista en la bd
  10. $buscar= mysqli_query("select nivel from $tabla where (user_id = $SESSION['user_id']) LIMIT 1") or die ("El usuario no está en la BD<br>".mysqli_error($link));
  11. }
  12.  
  13.  
Y ahi comparar el nivel y los permisos, pero siempre desde un $SESSION. Hay otras formas de hacer esto?


Título: Re: ¿Son seguras las sesiones?
Publicado por: engel lex en 1 Febrero 2017, 00:38 am
si el usuario está en session está en DB, si no es así, algo raro pasa...

si hay otras formas... directamente con $_COOKIES creas un identificador y lo almacenas en una tabla junto con los datos que quieras almacenar, cada vez que se cargue la pagina lees $_COOKIES y si tiene el identificador, lees la DB, si exíste, cargas su rol... para esto no son utiles las tablas comunes debido a la lentitud, en este caso tienes que crear una tabla que corra en ram (memory tables)

https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html (https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html)

un nivel de seguridad mas, es que cada vez que lees la $_COOKIE, la recalculas y mandas el nuevo identificador, así si llegaran a robar el ID solo será valido antes que esa persona cargue de nuevo la pagina... eso si, si recalculas con un motor predecible, será peor el remedio que la enfermedad