¿Son seguras las sesiones?

Iniciado por RevolucionVegana, 28 Enero 2017, 19:29 PM

0 Miembros y 1 Visitante están viendo este tema.

RevolucionVegana

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!!
HAS DICHO ALGO NENAAAAAA?!

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

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.
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

CitarPero 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

document.cookie

anotas el contenido que te muestra

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

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

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?
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

Cita de: 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.

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

CitarO 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"...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

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 (PHP) [Seleccionar]

include = "bd.php";
if(!isset($SESSION['user_id']))
{
   //si no existe la cookie de id de usuario, lo mando a loguearse
   header("location:login.php");
}
else
{
//comprobar que el user_id exista en la bd
$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));
}


Y ahi comparar el nivel y los permisos, pero siempre desde un $SESSION. Hay otras formas de hacer esto?
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

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

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.