elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Ayuda con sistema login
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con sistema login  (Leído 1,783 veces)
pedrox@

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Ayuda con sistema login
« en: 27 Agosto 2008, 19:47 pm »

hola a todos
estoy creando un sistema de login para mi web pero veo que me estoy liando y nose de que forma hacerlo seguro, esto es lo que llevo hecho:

esta es la tabla SQL:

Código
  1. CREATE TABLE users(
  2. id INT NOT NULL AUTO_INCREMENT,
  3. PRIMARY KEY(id),
  4. username VARCHAR(30) NOT NULL,
  5. password VARCHAR(20) NOT NULL);
  6.  
  7. -- USERS --
  8. INSERT INTO `users` VALUES (1, 'admin', '827ccb0eea8a706c4c34a16891f84e7b');


Aquí el code php (login.php):

Código
  1. <?php
  2.  
  3. $dbhost = 'localhost';
  4. $dbuser = 'root';
  5. $dbpass = '12345';
  6. $db = 'web';
  7.  
  8. $conectar = mysql_connect($dbhost,$dbuser,$dbpass);
  9. mysql_select_db($db,$conectar);
  10.  
  11. if (isset($_SESSION['admin_username'])){
  12. echo "Ya estás autentificado";
  13.        header("Location: admin.php");
  14. }
  15.  
  16. if ($_POST['username']) {
  17. $username = $_POST['username'];
  18. $password = $_POST['password'];
  19.  
  20.  
  21. if ($password==NULL) {
  22. echo "La password no fue enviada";
  23. }
  24.  
  25. else{
  26. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  27. $data = mysql_fetch_array($query);
  28. if($data['password'] != md5($password)) {
  29. echo "Login incorrecto";
  30. }
  31.  
  32. $query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
  33. $row = mysql_fetch_array($query);
  34. $_SESSION["admin_username"] = $row['username'];
  35. echo "Has sido logueado correctamente ".$_SESSION['admin_username']." y puedes acceder al admin.php.";
  36. }
  37. }
  38. ?>
  39.  
  40.  
  41. <form action='login.php' method='POST'>
  42. <table style='border:1px solid #000000;'>
  43. <tr>
  44. <td align='right'>
  45. Nombre de usuario: <input type='text' size='15' maxlength='25' name='username'>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td align='right'>
  50. Password: <input type='password' size='15' maxlength='25' name='password'>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td align='center'>
  55. <input type="submit" value="Login">
  56. </td>
  57. </tr>
  58. <tr>
  59. <td align='center'>
  60. </td>
  61. </tr>
  62. </table>
  63. </form>

Creo que me estoy complicando bastante para lo que quiero hacer, tambien hay un par de SQL Injections por ahí... ¿Como lo podría mejorar? ¿Qué cambiarian del código? ¿Cómo lo puedo hacer más seguro?

cheers!


En línea

Ertai
Colaborador
***
Desconectado Desconectado

Mensajes: 2.025


Ralph Wiggum


Ver Perfil
Re: Ayuda con sistema login
« Respuesta #1 en: 27 Agosto 2008, 21:25 pm »

Hola,

Si, hay cosas que puedes mejorar.

Primero codifica en md5 el password y luego haz la consulta. Sabrás si existe mirando en numero de filas devueltas por MySQL. Además no hace falta que hagas dos consultas, lo puedes hacer en una, busca el usuario introducido y su contraseña en md5.

Comprueba que el usuario tenga los caracteres A-Za-z0-9 o como desees antes de hacer la SQL y con el md5 del password ya no tendras problemas de inyecciones.

Otra cosa: tu campo en BDD de password es unn varchar de 20, y md5 esta codificado en 32, así que deberías cambiarlo.

Y mejor no uses el NULL para comparaciones a no ser que sepas que estas haciendo, pues PHP trata las variables muy diferente que en C o C++, usa mejor funciones del estilo empty(), isset(), etc...

Un saludo!


En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sistema de login en el que NO se pueda forzar el logueo por URL
PHP
‭lipman 6 4,110 Último mensaje 23 Junio 2011, 15:56 pm
por moyo18
Sistema de login.
PHP
lnvisible 4 3,018 Último mensaje 1 Diciembre 2011, 04:33 am
por #!drvy
[java] [python] Sistema de login.
Programación General
lnvisible 5 4,798 Último mensaje 22 Enero 2012, 22:45 pm
por lnvisible
Sistema de Login Seguro
PHP
GameAndWatch 6 9,239 Último mensaje 23 Junio 2012, 17:02 pm
por marko1985
Error al usar un sistema de login.
PHP
GonzaFz 0 1,413 Último mensaje 2 Febrero 2013, 03:51 am
por GonzaFz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines