Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: dimitrix en 17 Septiembre 2008, 17:27 pm



Título: Sesion SQL
Publicado por: dimitrix en 17 Septiembre 2008, 17:27 pm
Vamos a ver, estoy programando una cosa en PHP/SQL, lo que no se bien es como hacer lo siguiente.

- Hacer que un user se cree una cuenta (se hacerlo)
- Hacer que se guarde datos tipo, nick, pass (en md5 o no) (se hacerlo)
- Hacer que al logearse se cree un cookie con un contenido (se hacerlo)

Lo que no se o mejor dicho no entiendo es que me recomendais que guarde en la cookie para saber que user es, me eplico, podría hacer una función random que al crear una cuenta se guarde como el valor "cookie", pero es un poco a lo desesperado, me gustaría saber si hay alguna forma mejor para hacer eso.

Muchas gracias.


Título: Re: Sesion SQL
Publicado por: Rentero en 17 Septiembre 2008, 17:42 pm
Me haces dudar ami también :)

¿Quieres saber que poner en la cookie para saber que user es?
Puedes poner un identificador o el nombre de usuario, por ejemplo.

Pero tendrás que validar que es un usuario correcto. Una solución sería tener el par user-password en la cookie y comprobar que ese pass corresponde a ese user.

Si solo pones un id o un nombre, puede falsearse facilmente.


Título: Re: Sesion SQL
Publicado por: dimitrix en 17 Septiembre 2008, 17:47 pm
- El problema de si pongo su nick es que cualquiera que edite la cookie ya podría entrar en la cookie de otro.

- El problema de si pongo la pass en la cookie aunque sea cifrada (MD5, etc...) sería que se puede conseguir con crackeadores y que si hay dos users con la misma password pues no funcionaría bien.

Si pongo un "id" no se puede falasear muy facilmente (creo XD), quiero decir, por ejemplo, si pongo un random que sea de "0" a "9" y de "A" a "F" con una longitud de 15 dígitos, pues sería muy complicado, pero creo que esto sería un poco "a la desesperada" ¿No?

Un saludo.


Título: Re: Sesion SQL
Publicado por: Rentero en 17 Septiembre 2008, 18:36 pm
Si pones el user-pass no hay problema. Salvo que le roben la cookie, pero es un riego asumible.

Si pones user-pass o id-pass no hay ningun problema con que dos usuarios tengan la misma contraseña. Porque tú lo que compruebas es que la contraseña de tal usuario sea tal. El único problema es que dos usuarios con un mismo nombre(que si lo permites es poco lógico) tengan la misma pass.

El tema de crackear un md5 es demasiado complicado, siempre que no sea una contraseña corta y muy usual. Ahora te pongo un par de ejemplos para salvarlo.

Que mas...uhmmm. ahh si, cuando hablo de un identificador me refiero a tener una colunma autoincrementable en la tabla "users", con lo que cada nuevo usuario registrado tendrá una id = (id_ultimo_registrado) + 1; eso es lo más habitual en sistema de usuarios, llevar un recuento de los que hay e identificarlos por un número.

Otra cosa...para complicar el crackeo de md5, por ejemplo:
Código
  1. <?php
  2. $pass = "blabla"; //pass introducida por el usuario al registrarse.
  3. $pass = numAleatorio()."!.<".$pass."7bhw"; //pass que irá a la bd y a la cookie posteriormente.
  4. ?>

O más facil todavia:
Código
  1. <?php
  2. $pass = md5(md5());
  3. ?>

También hay otros algoritmos de cifrado, pero con eso me parece bastante.

No se si me dejo algo...


Título: Re: Sesion SQL
Publicado por: dimitrix en 17 Septiembre 2008, 20:00 pm
Ok, gracias, no obstante si pongo lo de "autoincrementar" con cambiar de número ya se podría acceder a otra cuenta.
De todos modos como me gustaría que no existiese nada de pass ni de user en la cookie, lo haré del otor método que ya he dicho antes de dar por random un valor a cada usuario.

Muchas gracias por todo.


Título: Re: Sesion SQL
Publicado por: Rentero en 17 Septiembre 2008, 21:27 pm
Ok, gracias, no obstante si pongo lo de "autoincrementar" con cambiar de número ya se podría acceder a otra cuenta.
De todos modos como me gustaría que no existiese nada de pass ni de user en la cookie, lo haré del otor método que ya he dicho antes de dar por random un valor a cada usuario.

Muchas gracias por todo.
Volvemos a lo mismo, si pones solo el id si podria cambiarse...si pones el id y la contraseña no xD.

Poner un numero aleatorio o el usuario-contraseña(bien cifrados) es exactamente igual de seguro, me atrevería ha decir que lo segundo es mejor.

Pero bueno, es lo que yo pienso.


Título: Re: Sesion SQL
Publicado por: SpiderNet en 19 Septiembre 2008, 03:31 am
Que pasa si el navegador tiene bloqueadas las cookies???

De que otra forma podemos hacerlo???


Saludos!!!


Título: Re: Sesion SQL
Publicado por: dimitrix en 19 Septiembre 2008, 07:12 am
Eso sería problema del user, no obstante también se puede hacer así:

http://www.dominio.com/algo.php?session=af33e5838ffedb4d3d5233a92609cf09

Un saludo.


Título: Re: Sesion SQL
Publicado por: cassiani en 19 Septiembre 2008, 17:59 pm
Que pasa si el navegador tiene bloqueadas las cookies???
De que otra forma podemos hacerlo???

propagación por url, aunque igual que el anterior, tiene sus desventajas


Título: Re: Sesion SQL
Publicado por: SirLanceCC en 19 Septiembre 2008, 19:34 pm
Justamente hoy estaba pensando en eso...
¿Que tan bueno sería hacer algo así?

Cuando el usuario ingrese sacar obtener el timestamp
Guardar en la base de datos el timestamp
Guardar en las cookies el id de usuario y el timestamp (codificado quizas)
Cuando se desee verificar que el usuario es legitimo se compara el id y el timestamp

Ahora si quieren falsificar las cookies del usuario tendrían que saber el momento exacto en que ingresó por ultima vez. Y la contraseña no aparece por ningún lado

¿Como ven? ¿Es buena idea? ¿Es seguro?


Título: Re: Sesion SQL
Publicado por: Rentero en 19 Septiembre 2008, 20:46 pm
Es lo mismo, si para entrar se requiere el nombre de usuario y el timestamp y alguien os consigue de la cookie...ya puede entrar jeje

El tema esque si usas cookies de esa forma te arriesgas a eso. Pero se puede pensar en usar sesiones por ejemplo, o una mezcla de ambas cosas...nose.


Título: Re: Sesion SQL
Publicado por: SirLanceCC en 19 Septiembre 2008, 22:34 pm
Pero el timestamp se actualizaría cada vez que el usuario ingresa con su nombre y contraseña. El usuario no ve el timestamp por ningun lado, si no que se toma como un valor más de seguridad.

O mejor guardamos algo asi en la cookie
md5(timestamp_cookie.md5(pass_cookie));

y luego lo comparamos con
md5(timestamp_sql.pass_md5_sql);

No sé ya medio me hice bolas. El punto es que sería un punto más deseguridad por que es difcil adivinar el segundo exacto en que el usuario ingresó por ultima vez al sitio.


Título: Re: Sesion SQL
Publicado por: Rentero en 19 Septiembre 2008, 23:11 pm
ummh, no termino de comprenderte.

Dices que el timestamp se actualiza cada vez que el usuario entra. Y dices que es dificil adivinar el segundo exacto en el que un usuario se loguea.

¿A que te refieres? ¿Cuando comparas los timestamp? jajaj estoy hecho un lio.

Yo lo que veo es que pongas lo que pongas en una cookie, si alguien se hace con ella podrá hacerse pasar por ese usuario ni no se compara por ejemplo el identificador de session (y aun así es posible). Ya sea timestamp, id, pass, usuario, lo que sea...no se si me explico.


Título: Re: Sesion SQL
Publicado por: Hans el Topo en 20 Septiembre 2008, 18:37 pm
yo no se para que os complicáis tanto la vida, menudos peliculones os montáis xD

poner 2 valores para cada usuario, uno único y el otro que se pueda repetir (el user pass de toda la vida) si eres un paranoico cifra los datos y listo

si un usuario quiere mantener en seguridad los datos de su cookie que le de a logout cuando termine la sesion
claro esta el programador se encarga de darle esa opción de logout que consiste en borrar las cookies (ponerlas a vacío) para que nadie fisgonee