Foros del Web » Programando para Internet » PHP »

Menudo bug!!

Estas en el tema de Menudo bug!! en el foro de PHP en Foros del Web. Ummmm... en mi sitio cuando un usuario se logea le meto una cookie con un identificador, este identificador es el mismo que tiene asignado ese ...
  #1 (permalink)  
Antiguo 05/07/2005, 17:19
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Menudo bug!!

Ummmm... en mi sitio cuando un usuario se logea le meto una cookie con un identificador, este identificador es el mismo que tiene asignado ese usuario en la base de datos, es decir, es el campo id_user de mi tabla usuarios...

A partir de ese número selecciono todos los datos y preferencias del usuario, incluido su nivel de privilegios...

El webmaster puede borrar comentarios y noticias y demás...

Si se pudiera modificar el contenido de la cookie y cambiar ese número por el del webmaster automáticamente se logearía con el nivel de privilegios más alto...

Cómo lo puedo solucionar? En vez de poner un campo autonumérico genero un código de 32 caracteres y es eso lo que meto en la cookie o me recomendáis que use sesiones y me olvide de las cookies?

Saludos.

P.D.: y digo menudo bug porque he encontrado un programa que modifica el contenido de las cookies y he probado a 'piratear' mi web y lo he conseguido... snif...
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #2 (permalink)  
Antiguo 05/07/2005, 17:25
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 15 años
Puntos: 3
ke patxaaaaa

vamos a ver, yo usaba cookies y acabe hasta las mismisimas pelotas xq no dejaban de sorprenderme y siempre negativamente...

Por eso empece con las sessiones y me va dpm, no he tenido problemas, encima son sencillas de usar etc... si tienes bien configurado el servidor y demás te ira bien con las sessions no pierdas mas el tiempo con las cookies.

Un saludo !

Mikel.
__________________
aste nagusia
  #3 (permalink)  
Antiguo 05/07/2005, 17:50
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
El problema es que no sé trabajar con ellas, me recomiendas algún tutorial?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #4 (permalink)  
Antiguo 05/07/2005, 17:57
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 15 años
Puntos: 3
Te pongo un ejemplo con esto serás capaz de hacer virgerias

tienes una web con un form con los campos a rellenar de usuario y password y el form va dirigido a entrar.php x ejemplo
en entrar.php te pones
<?php
session_start();
$_SESSION['usuariosession']= $usuario;
$_SESSION['pwdsession']= $password;
?>

y despues añadele un link a comprobar.php
<a href=comprobar.php>Ver sessions!!</a>

y en comprobar.php

<?php
session_start();
echo $_SESSION['usuariosession'];
echo $_SESSION['pwdsession'];
?>
veras que te las saca, recuerda que siempre que quieras sacar las sesiones en una pagina tienes q poner antes:
session_start(); ok? espero q t sirva, yo con eso he conseguido hacer infinidad de cosas y te olvidas de las cookies, si ves que no te funciona pregunta, puede ser por que tienes algo desactivado en el servidor, por lo demas no deberias tener mayor problema.

Saludos!
__________________
aste nagusia
  #5 (permalink)  
Antiguo 05/07/2005, 18:07
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
En mi site todos los módulos se cargan en index.php, entonces bastará con añadirlo ahí y listo, no?

Bueno, mañana pruebo y haber que tal sale.

Saludos y gracias por la explicación.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #6 (permalink)  
Antiguo 05/07/2005, 21:56
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
aqui el problema no esta CON QUE TRABAJAS (cookies, sessions) el tema es que lo estas haciendo mal...

La cookie no debe guardar el rango (nivel) del usuario, sino los datos para identificarse (user y pass), el resto debe ser todo del lado del servidor... cuando el usuario ingresa al sitio tu lees la cookie y seteas una variable con el nivel del usuario (esta variable no podrá leerla nadie, ya que esta del lado del servidor).

Con esto el usuario no podrá cambiarse de nivel, a no ser que descubra el nick y pass de un usuario administrados (pues eso ya es problema "humano" y no de programacion).
__________________
I Love Programming...
  #7 (permalink)  
Antiguo 06/07/2005, 08:37
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
He logrado implementar lo de las sesiones, ya funciona, pero ahora necesito establecer el tiempo que dura una sesión.

Lo que quiero es que el usuario al marcar la opción 'recordar' peramezca logeado durante un período de 3 meses para que cada vez que cierre el navegador no tenga que logearse de nuevo...

Cómo establezco el tiempo de la sesión?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #8 (permalink)  
Antiguo 06/07/2005, 10:32
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
La sesion acaba cuando se cierra la pagina (pues eso es una "sesion"), para recordar al usuario tendrás que volver al principio y usar cookies...
__________________
I Love Programming...
  #9 (permalink)  
Antiguo 06/07/2005, 11:18
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Cita:
Iniciado por FuLaNo_
aqui el problema no esta CON QUE TRABAJAS (cookies, sessions) el tema es que lo estas haciendo mal...

La cookie no debe guardar el rango (nivel) del usuario, sino los datos para identificarse (user y pass), el resto debe ser todo del lado del servidor... cuando el usuario ingresa al sitio tu lees la cookie y seteas una variable con el nivel del usuario (esta variable no podrá leerla nadie, ya que esta del lado del servidor).

Con esto el usuario no podrá cambiarse de nivel, a no ser que descubra el nick y pass de un usuario administrados (pues eso ya es problema "humano" y no de programacion).


Simplemente es el problema...ni cookies, ni sessiones...

Y siguiendo con esto, un consejo...hasheen todo lo que puedan, asi aplicaran un poco mas de seguridad a sus cosas.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 06/07/2005, 11:33
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
no entendí el mensaje, tuve razón en lo que puse o no? :S
__________________
I Love Programming...
  #11 (permalink)  
Antiguo 06/07/2005, 11:33
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Pues cada vez entiendo menos... en la cookie guardo un número que identifica al usuario entre todos, con ése número puedo sacar de la base de datos toda la información de ése usuario...

Si no hago así entonces cómo?

Saludos.

P.D.: otro detalle: entonces cuándo comienza la sesión, cuando el usuario visita la web o cuando se logea correctamente?
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 06/07/2005 a las 12:36
  #12 (permalink)  
Antiguo 06/07/2005, 12:25
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Cita:
Iniciado por FuLaNo_
no entendí el mensaje, tuve razón en lo que puse o no? :S
Por supuesto!! , por eso el
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #13 (permalink)  
Antiguo 06/07/2005, 13:04
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
nicolaspar :) me habia entrado la duda...

DjNelson.

1) La session comiensa cuando se loguea correctamente (se guarden los valores en una cookie o no) y expira cuando sale (en el caso de sesiones) o cuando se agota el tiempo dado (en caso de cookies).

2) Tu tienes que guardar el nombre de usuario (nick) y password en la cookie (todo encriptado con md5() de ser posible).

Tienes que hacer un script que se incluya en todas tus paginas (si es modular, obviamente solo en el cargador de los modulos) en donde lees el contenido de la cookie, si la cookie no tiene contenido, rechazas o pides login, si la cookie tiene contenido lo comparas con los datos en la DB, de dar resultado afirmativo (el nick y el password existen en la base de datos) seteas nuevamente la cookie y prosigues con tus otros scripts...

3) para denegar o no el acceso deberias hacer un tercer script (incluido solo en los modulos que son para administradores) que leea el nivel del usuario desde la base de datos...


Yo lo hago simple:

con la cookie ya seteada
1- leo la cookie y la comparo con mi DB, si da OK seteo todas las variables del usuario que necesitare luego, ej:
$user["nick"] = $row["nick"];
$user["level"] = $row["level"];
$user["name"] = $row["nombre"];
....

Luego solo tengo que hacer esto en los archivos a los cuales no quiero que ingrese...

Código PHP:
<?php
if ($user["level"] != 1) { echo 'Error, aqui solo usuarios con rango 1'; exit; }
?>
Entiendes? simplemente tienes que hacer varios archivos (o uno solo, porque no) e incluirlos en el documento padre...
__________________
I Love Programming...
  #14 (permalink)  
Antiguo 06/07/2005, 13:07
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
Me olvidaba, porque guardar el user y la pass y no el Nro identificador como haces vos?, simple, yo puedo ver el ID del usuario en cualquier momento, luego llego a mi maquina y me armo una cookie con md5(1) (siendo 1 el ID del usuario)... en cambio el password es secreto (en casi todos los casos) y si, yo "jugando" quizas logre ingresar, pero es mas facil descubrir un numero que una clave alfanumerica (o vaya a saber que use el usuario...)
__________________
I Love Programming...
  #15 (permalink)  
Antiguo 06/07/2005, 13:30
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Gracias fulano, entonces guardaré el password encriptado en la sesión en vez del identificador del usuario aunque tengo que modificar muchísimas cosas...

Saludos a todos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #16 (permalink)  
Antiguo 06/07/2005, 13:46
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
No he leido todo, pero si algo de que no guardan el id pasado por md5 por que es peligroso igual.

La cosa es asi, pasas el id por md5, pero poniendole un poco de "sal", entonces, si antes haciamos:

$id = 1;
$guardo = md5($id);

Ahora harías:

$id = 1;
$hash = "hga87)*2lkjh";
$guardo = md5($hash.$id);
Y para validarlo es de la misma manera.

Este $hash lo guardan en un include, y lo pueden regenerar cada x tiempo, o concatenarle algo como date("m"), entonces, se pueden cansar de pasar numeros por md5, que sin la sal no lo encontraran...

Espero que se haya entendido y les sirva.


PD:Hay maneras de hacer esto mas complejo, pero me parece que no para este caso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #17 (permalink)  
Antiguo 06/07/2005, 17:00
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Pero sigo sin entender un par de cosas, la primera: porqué guardar en la sesión el usuario y el password si con una sola de esas variables ya nos sirve para identificar al usuario y la otra: cómo se hace entonces para recordar la sesión incluso después de cerrar el navegador (igual que en este foro...)?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #18 (permalink)  
Antiguo 06/07/2005, 17:06
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
El pass no deberias guardarlo nunca, y el username, solo para mostrar en algun lado el "bienvenido DjNelson" sin hacer una nueva consulta a la db para eso.

Con guardar el ID, pasado por md5 como te explique, estas mas que bien.

Para recordarlo, basta con guardar en una cookie este id, y un valor hasheado que validandolo te apruebe el primero, y asi poder darle paso a un nuevo login automatico.
PD: Las sessiones se pierden cuando cerras el browser.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #19 (permalink)  
Antiguo 06/07/2005, 17:09
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Ok, creo que ya lo tengo claro, gracias de nuevo a todos.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #20 (permalink)  
Antiguo 06/07/2005, 17:36
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
Como que el password no deberia guardarlo nunca? y como sabes que la cookie es realmente de quien dice ser?, solo verificando que el password corresponde a ese user se puede hacer esto...

Volvemos a lo mismo de antes, sin el password yo puedo setear una cookie con mi nick(el nick es publico, todos lo vemos) y listo....
__________________
I Love Programming...
  #21 (permalink)  
Antiguo 06/07/2005, 17:39
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Pero el id que comenta Nicolaspar no es público, viene siendo lo mismo que el password...

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #22 (permalink)  
Antiguo 06/07/2005, 18:51
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Vos tendrás guardado un id (Ej 1), y una clave que encriptada con una semilla te dara un md5.
O sea. si encriptas el codigo y lo guardas junto con su md5 tendrías en la cookie algo como:
codigo = 1
encriptado=alkusw982u2873918272uhb
Obviamente, cambio el 1 por el 2, lo paso por md5, y adentro como user 2.
EL tema es que lo que yo digo, es que cuando lo encriptas, le pongas una semilla, algo como:

codigo = 1
encriptado = md5($hash.$codigo);
Donde $hash es algo como "728*=)h9812yhw", o lo que se mas antoje, y esto solo lo sabes vos, y lo tenes guardado, sabiendo, que la suma del codigo mas esto es el codigo verdadero mas eso....no se tan complicado de entender.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #23 (permalink)  
Antiguo 07/07/2005, 07:07
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
perdon, pero si estas hablando de un ID como se usa siempre en MySQL, que es un ID que se autoincrementa, como que no es publico? yo se que ese id comienza en 1 y solo tengo que probar hasta encontrar uno que me sirva... 1, 2,3,4,5,6,7....

Ahora si el ID es algo generado al azar es otro tema y pido disculpas (y si es alfanumerico mejor).

Lo que dice nicolas tambien es cierto, puedes "agregarle" algo a ese id...


Pero todo depende... si vos usas los ID como casi todas las paginas ese ID siempre será publico... un ejemplo claro... http://www.forosdelweb.com/miembros/djnelson/

En donde 37199 es tu id de usuaro... si esta en la URL es más que publico...
__________________
I Love Programming...
  #24 (permalink)  
Antiguo 07/07/2005, 07:58
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Nos estamos refiriendo al ID ese que decis, a la clave primaria, al autoincremente..., Bueno, yo ese id lo paso hasheado con una semilla mia...y no vas a encontrar su equivalenete a nos ser que rompas md5...si ambas no coinciden, no es un id valido.

EJ:http://www.estudiowas.com.ar/proyect...89a7d780e27ee5
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #25 (permalink)  
Antiguo 07/07/2005, 08:09
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 14 años, 6 meses
Puntos: 2
entiendo...
__________________
I Love Programming...
  #26 (permalink)  
Antiguo 07/07/2005, 14:41
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Y yo también lo entendí y ya lo tengo listo y funciona correctamente. Y para lo de recordar la sesión hice así:

Cuando el usuario se logea correctamente y ha marcado 'recordar' le meto una cookie con ese hash que dice Nicolaspar generado a partir del id autoincrementado de la tabla, pero en la sesión guardo el id sin encriptar. Si lo guardo encriptado tengo que modificar mucho código ya que envío muchas consultas (¿Haré bien?)

Cuando el usuario cierra el navegador y la sesión termina la cookie sigue ahí, si vuelve, con ella puedo autoiniciar sesión y listo. Lo que hay en la cookie no se puede 'adivinar' ya que es un hash del tipo 'm6c3r9tqq9r3mit67cu1fa6i00' que usa la "sal" de la que hablaba Nicolaspar...

Saludos y gracias de nuevo.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #27 (permalink)  
Antiguo 07/07/2005, 17:07
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Leí aquí: http://www.webtaller.com/construccio...ns/seguras.php que los datos incluídos en las sesiones se pueden ver... si es así (se podrán modificar?!)

Me recomendáis que guarde el id encriptado también en la sesión?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #28 (permalink)  
Antiguo 07/07/2005, 19:03
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Mira, como correcto podes hacerlo, pero ya estas yendo un poco mas profundo...el leerte el sid lo podes hacer en muchos lados desde el get, donde por configuraciones se propaga solo, y aun así es muy complicado hacer algo con eso. A lo que voy, es que si alguien con ese conocimiento desea hacerte mal, lo hará seguramente de todas maneras, pero si quieres estar mas seguro, puedes hacerlo también.

PD: Imagino que estarás consiente que el costo de estas comparaciones son mayores para el sistema que estés armando, o sea, no es lo mismo comparar un id así:
"Select * from usuarios where id = ".$codigoUsuario;
que hacer algo como:
"Select * from usuarios where id = MD5('".$codigoUsuario."') ";
__________________
Mi punto de partida es Que Bueno Lo Nuevo

Última edición por nicolaspar; 05/07/2007 a las 16:23
  #29 (permalink)  
Antiguo 08/07/2005, 00:10
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 5 meses
Puntos: 2
Buenas, he leido y como nunca tube una pagina web propia no me interesaba este tema, pero no entiendo que hacen con el id (más el hash que le ponen) cuando lo recuperan de la cookie. Osea en la DB tienen el id "puro" y como comparan el id de la cookie con el de la DB, ya que el hash y pasado por md5 no se puede romper, ahora mi duda es si tienen que traer todos los id ponerle el hash pasarlos por md5 y despues ahi hacen la comparación mediante codigo y no por consulta a la DB (que es lo mas comodo). Espero que allan entendido mi duda y la sepan despejar. Saludos.
  #30 (permalink)  
Antiguo 08/07/2005, 15:12
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Yo lo hice así: cuando el usuario marca recordar le meto la cookie con el id encriptado, luego cuando el usuario vuelve comparo ese id encriptado con todos los id encriptados (extraigo todos los ids de la base de datos (los "puros") y los encripto siguiendo el mismo método que hice con el que puse en la cookie...), si alguno concuerda inicio la sesión.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
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:12.