Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: ‭lipman en 11 Diciembre 2008, 14:12 pm



Título: Dudas login, registrar...
Publicado por: ‭lipman en 11 Diciembre 2008, 14:12 pm
Buenas. Quiero hacer un sistema de registros y loggin y me entran varias dudas.

Cuando te registras, el user y el password lo sueles guardar en la base de datos imagino, pero, hay que ponerle alguna protección especial? o es como cualquier otro dato? Tienen los datos de la base de datos algún tipo de peligro?

Al loguearte, quiero poner tambien algo ponga "Recordarme", pero he oido que guardar la contraseña en las cookies es un gran error. Como podría solucionarlo?

Saludos y gracias


Título: Re: Dudas login, registrar...
Publicado por: :ohk<any> en 11 Diciembre 2008, 14:39 pm
Pues al guardarlas en la base de datos debes antes encriptarla, para eso puedes usar sha1, md5 u otros que estan disponibles. (si es a eso a lo que te refieres)

Y por lo de "recordarme", pues si es un error# pero de nada sirve prohibirlos  :P
Si te preocupan las cookies mejor haz que tu sitio sea inmune a los XSS  ;D


Título: Re: Dudas login, registrar...
Publicado por: Hadess_inf en 11 Diciembre 2008, 16:14 pm
Podria ser algo como esto, aqui se usa el md5 para tratar de proteger la clave:

$usr = "PneRoto";
$pwd = md5("mimamamequieremucho");
$sql ="insert into usuario values ('$usr','$pwd')";
mysql_query($sql);

 ::) ::) ::) ::) ::)


Título: Re: Dudas login, registrar...
Publicado por: ‭lipman en 11 Diciembre 2008, 17:09 pm
Muchas gracias a los dos  ;D a ver si lo acabo ya de una vez xD

Saludoss

PD: prefiero no abrir un post, aunque no tiene nada que ver pero, los posts de los foros se guardan en una tablita de esas? Quiero decir... se puede poner para guardar en una celda un texto sin especificar el tamaño máximo? Puede guardar muchos carácteres una tabla?

PD2: como seria para descifrar de md5?


Título: Re: Dudas login, registrar...
Publicado por: & eDu & en 11 Diciembre 2008, 22:13 pm
Buenas. Quiero hacer un sistema de registros y loggin y me entran varias dudas.

Cuando te registras, el user y el password lo sueles guardar en la base de datos imagino, pero, hay que ponerle alguna protección especial? o es como cualquier otro dato? Tienen los datos de la base de datos algún tipo de peligro?

Al loguearte, quiero poner tambien algo ponga "Recordarme", pero he oido que guardar la contraseña en las cookies es un gran error. Como podría solucionarlo?

Saludos y gracias
1º Puedes cifrar la contraseña con algún algoritmo tuyo o ya creado por ejemplo:
Código
  1. <?
  2. $pass = crypt("lipmanesfeo");
  3. echo $pass;
  4. ?>
Tienen algún peligro las bases de datos... bueno si alguien consiguiera acceder a ella y no estubieran encriptadas las contraseñas y fueran importantes... adiós! Si sabes lo que es una PTC(paid to click) los listos no encriptan las contraseñas y muchos usuarios ponen como contraseña las cuentas de su PayPal y AlertPay... entonces los dueños... sacan provecho al no estar cifrada la contraseña.
2º Puedes guardar la IP donde pidieron que se guarden las contraseñas es decir:
Código
  1. <?
  2. $guardar = mysql_query("INSERT INTO tabla_usuarios  (IP,USUARIO,CONTRASEÑA) VALUES ('ip','usuario','contraseña'");
  3. ?>
y cuando entren que haga un if
Código
  1. <?
  2. if (la ip == la ip guardada){
  3. ?>
  4. <input type="text" value="usuario"/>
  5. <input type="text" value="contraseña"/>
  6. <?
  7. }else{
  8. ?>
  9. <input type="text" />
  10. <input type="text" />
  11. <?
  12. }
  13. ?>

No se si te sirvió...


Título: Re: Dudas login, registrar...
Publicado por: ‭lipman en 11 Diciembre 2008, 22:36 pm
Es cierto... :D No se me ocurrió jugar con la IP  :P eso para lo de "Recordar" me servirá, muchas gracias, aunque me he dado cuenta del mensaje subliminal xD.

Pero si encriptas la clave con crypt o con md5... no puedes desencriptarla de ninguna manera?

Saludoss

Edito: según he visto "MD5 es un algoritmo de "una sola vía", o "One Way", es decir que no lo puedes descifrar, una forma sería hacer un "brute force", pero te tomaría demasiado tiempo." Así que he de suponer que es segura =P y con respecto a la de crypt " No existe una función de descifrado, ya que crypt() utiliza algoritmos no reversibles."

Entonces nada más creo, muchas gracias de nuevo ^^


Título: Re: Dudas login, registrar...
Publicado por: & eDu & en 12 Diciembre 2008, 16:39 pm
Me equivoqué, para cifrar es:

$pass = crypt("lapass","lipmanesfeo");

¿Que si se puede descifrar desde la funcion crypt...?
Creo que no, en el login haces lo siguiente:
Código
  1. <? if(isset($_post['usuario'])){
  2. $contraseña = $_POST['contraseña'];
  3. if(crypt($contraseña,"limpanesfeo") == lacontraseñaguardada){
  4. Login
  5. }else{
  6. COntraseña incorrecta
  7. }
  8. }
  9. ?>
  10. <form action="login.php" method="post"/>
  11. Usuario
  12. <input type="text" name="usuario"/>
  13. Contraseña
  14. <input type="password" name="contraseña"/>
  15. <input type="submit" value="Login"/>


Título: Re: Dudas login, registrar...
Publicado por: #!drvy en 13 Diciembre 2008, 17:17 pm
Código
  1. <?php
  2. # |-(B)-(S)-(M)-|
  3.  
  4. echo '<font color="red"> Comprobando usuario... </font> <br>';
  5. $db_user = 'root';
  6. $db_pass = '';
  7. $db_name = 'users';
  8. $db_host = 'localhost';
  9.  
  10. $connection = mysql_connect($db_host, $db_user, $db_pass) or die (mysql_error());
  11. mysql_select_db($db_name, $connection) or die (mysql_error());
  12.  
  13.  
  14. $user = htmlentities($_POST['user']);
  15. $pass = htmlentities(md5($_POST['pass']));
  16.  
  17. $num = 0;
  18. $query = mysql_query("SELECT * FROM users WHERE user='$user'",$connection);
  19.  
  20. if ($num < mysql_num_rows($query))
  21. {
  22. $duser = mysql_result($query,0,"user");
  23. $dpass = mysql_result($query,0,"password");
  24. } else {exit(" - Cab*** el usuario introducido no existe o.O");}
  25.  
  26. if ($pass != $dpass) {exit(" - Pero seras cab*** (?) pon la p**a contraseña correctamente xD");}
  27.  
  28.  
  29. echo "Hello, my name is Ahmed... I'am the dead terrorist....I'm g0nna kill ya !!!";
  30.  
  31. ?>

un script que tenia por ahí xD

yo siempre guardo cookies cuando quiero que me recuerde.... o si no sessiones... de todos modos mientras la contraseña este cifrada no veo porque no. Lo de la ip no es muy muy utill si el usuario tiene una ip dinámica por ejemplo..
y procura limpiar variables por sqli...





Saludos


Título: Re: Dudas login, registrar...
Publicado por: ‭lipman en 14 Diciembre 2008, 01:24 am
Al final me ha quedado parecido al tuyo #bsm y eso antes de mirarlo xD.

Con lo de respecto a la IP, ya habia pensado en lo de IP dinámica (más que nada porque tengo una xD) y se me habia ocurrido comparar los 3 primeros trozos de la IP, es decir 255.255.255.255 puesto que creo recordar que con IP dinámica solo cambia el último (y ahora empiezo a dudar si tambien cambia el penúltimo =P).

El único "problema" sería si alguien spoofeara la IP =S o si por algún casual alguien tuviera la misma IP (esto no se si es posible xD)

Un saludo


Título: Re: Dudas login, registrar...
Publicado por: WHK en 16 Diciembre 2008, 05:58 am
#bsm tu código tiene sql inyección ya que htmlentities no filtra las comillas simples, mejor usas htmlspqcialchars con ent_quotes aunque tampoco es una solución válida para cuando si quieras ingresar datos con comillas, para eso hay una función especializada para evitar una inyección sql y se llama mysql_real_escape_string

por ejemplo..
Código
  1. mysql_query('SELECT * FROM users WHERE user=\''.mysql_real_escape_string($user).'\'',$connection);

Claro que esto tampoco funciona si no encerramos la variable en comillas para que no pueda escapar.

Eso de guardarlas cookies puedes guardar solo un $SESSION[] con phpsessid, de esta forma puedes almacenar su user, id, hasta su pass sin que nadie tenga acceso a ella ni el rpopio usuario ya que todo estará guardado en el servidor mostrando unicamente el hash, ahora también puedes agregar datos como ip y el explorador para comprobar que el es el verdadero usuario con esa cookie y si no es entonces que sea expulsado y evitamos un robo de cookies ya que si alguien te la roba no podrá hacer nada a menos que sepa la estructura de la sesión misma y spofear la ip mas el explorador aunque lo veo dificil y mas aún si no delatas el código.. hasta puedes cifrar todo eso en md5 como comprobador (no es buena idea si es propenso a ataques ddos  :P).

Eso que alguien dijo de hacer el sitio inmune a xss depende del sistema que tan interactivo sea, si es muy interactivo es dificil llegar a ese nivel aunque si se puede evitar el uso malicioso de un xss como evitar los xsrf con tokens y verificación de referers, etc mas una prevención de robo de cookies como lo dije mas arriba.


Título: Re: Dudas login, registrar...
Publicado por: #!drvy en 16 Diciembre 2008, 23:08 pm
mmmm tienes razón WHK nunca me avía fijando en que no filtra las comillas simples  :¬¬ :¬¬



Saludos


Título: Re: Dudas login, registrar...
Publicado por: Makiz0rz en 18 Diciembre 2008, 11:56 am
El algoritmo md5 es desencriptable por el momento (aunque con eso de las tarjetas nVidia he leído que algo pueden ir sacando, pero no viene al caso), así que se usaría para comprobar.

Si encriptas por ejemplo "hola" a md5, supongamos que te sale "876sasd897asd".

Entonces en la celda de la base de datos de password tendrías "876sasd897asd", así que cuando un usuario se loguee, para comprobar que ha introducido la contraseña correctamente, habría que comprobar que md5($_POST['password']) es igual a la celda de la base de datos de la contraseña, simplemente eso. Para eso se usaría el algoritmo md5 en las bases de datos de los logins. No es que sea una protección increíble, pero de algo te sirve si por sql te sacan datos de la tabla.

Un saludow


Título: Re: Dudas login, registrar...
Publicado por: WHK en 20 Diciembre 2008, 19:20 pm
Citar
El algoritmo md5 es desencriptable por el momento
No es que sea desencriptable, lo que sucede es que matemáticamente es imposible llegar al punto real del string original ya que posibilidades para llegar a un resultado desde un mismo hash son muchas y eso se llama colisión, eso significa que puedes obtener dos resultados de un mismo hash md5 pero no significa que sea decifrable  :P, ahora también se puede crackear desde una base de datos atacando por fuerza bruta pero bueno.. md5 es el algoritmo estandard para el cifrado de algo que no quieres revelar pero si quieres mantener su exclusividad.