Foros del Web » Programando para Internet » PHP »

Aprendiendo, sistema de usuarios

Estas en el tema de Aprendiendo, sistema de usuarios en el foro de PHP en Foros del Web. HOla amigos del PHP... Estoy haciendo un sistema de usuarios bastante inseguro, pero me sirve para ir practicando php, que para mi es algo nuevo. ...
  #1 (permalink)  
Antiguo 19/12/2009, 18:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 154
Antigüedad: 15 años, 5 meses
Puntos: 2
Aprendiendo, sistema de usuarios

HOla amigos del PHP...

Estoy haciendo un sistema de usuarios bastante inseguro, pero me sirve para ir practicando php, que para mi es algo nuevo.

El codigo que tengo es éste:

Código PHP:
<?php

//Conectamos a mysql y seleccionamos la bd
require('config.php'); 

//Almacenamos la información proporcionada por el usuario en variables
$user $_POST['usrlgn'];
$pass $_POST['psslgn'];

//Creamos la consulta
$query "SELECT * FROM forito";  

//Ejecutamos la consulta
$result mysql_query($query) or die (mysql_error());   

//La guardamos en un array asociativo
while ($array mysql_fetch_array($result))  
{  

//Sacamos los datos del array asociativo y los asignamos a variables normales
$usermysql $array['userid'];  
$passmysql $array['pass'];  

/*Dentro del while, ejecutamos condicionales para comparar la informacion
proporcionada por el usuario con la existente en la BD.*/

if($usermysql == $user && $passmysql == $pass) {

echo 
'Tu informacion es correcta';

}else {

echo 
'Tu combinación user/pass es incorrecta';

}

};

?>

Con este código todo va bien, pero sólo cuando hay solo 1 registro en mysql. Cuando hay más de uno, no funciona.

Qué puede ser? Me ayudan?

Gracias de antemano.
  #2 (permalink)  
Antiguo 19/12/2009, 18:14
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 4 meses
Puntos: 21
Respuesta: Aprendiendo, sistema de usuarios

La verdad que ademas de inseguro es caro, para el servidor XD

Mira, para los sistema de usuario se suele hacer una consulta de este tipo:

Código PHP:
$query mysql_query("SELECT password FROM `usuarios` WHERE username = '$user' "); 
entonces, despues envezde hacer un while... haces un if:
Código PHP:
$datos mysql_fetch_assoc($query); //Aclaro que mysql_fetch_assoc es mas barato que mysql_fetch_array y es practicamente lo mismo.

if($pass $datos['password']){
echo 
'Logeo correcto';

Ahora bien, respecto a la seguridad... la password, debe estar encodeada en md5() para proteger los datos de los usuarios, por ejemplo cuando un usuario se registra antes de insertar la pass en la DB, haces

Código PHP:
$password md5($password);
//Despues aca haces el INSERT a la DB con la pass ya encodeada en MD5 
cuando vallas a comprobar que los datos son correctos, osea, cuando se logea... tambien tnes que encodear en md5 la pass que recivis por $_POST.

Otro temita, te recomiendo usar htmlentities(); en el nombre de usuario, de la misma forma que hacemos con la pass al momento de registrar y tambien al de logear para evitar una SQL injection.

Suerte.
  #3 (permalink)  
Antiguo 19/12/2009, 18:27
 
Fecha de Ingreso: noviembre-2008
Mensajes: 154
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Aprendiendo, sistema de usuarios

ermm...muchas gracias amigo, pero he probado tu código, este no funciona bien.

el problema es que da igual la pass que pongas, siempre te dará logeo correcto. qué hago para solucionar esto?
  #4 (permalink)  
Antiguo 19/12/2009, 18:36
Avatar de zaetoner  
Fecha de Ingreso: noviembre-2007
Ubicación: La ciudad de México
Mensajes: 607
Antigüedad: 16 años, 5 meses
Puntos: 30
Respuesta: Aprendiendo, sistema de usuarios

en realidad eso tambien tiene un muy pequeño rango de inseguridad lo mejor es siempre usar:
Código PHP:
Ver original
  1. $usuario=$_POST['usuario'];
  2. $password=$_POST['password'];
  3.  
  4. $c=mysql_query("SELECT id FROM usuarios WHERE usuario='$usuario' and password='$password'");
  5.  
  6. if($a>0){
  7. echo "los datos son correctos";
  8. }elseif($a==0){
  9. echo "no coinsiden el nick con el password";
  10. }

y ademas le evitas cargas a tu servidor de este modo
__________________
...
  #5 (permalink)  
Antiguo 19/12/2009, 18:36
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 4 meses
Puntos: 21
Respuesta: Aprendiendo, sistema de usuarios

Código PHP:
if($pass == $datos['password']){
echo 
'Logeo correcto';

modifica eso, me falto un =
  #6 (permalink)  
Antiguo 19/12/2009, 18:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 154
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Aprendiendo, sistema de usuarios

zaetoner, muchas gracias, pero prefiero el código de bioxido.

bioxido, muchas gracias, despues de un par de modificaciones en tu código funciona perfectamente.
  #7 (permalink)  
Antiguo 19/12/2009, 19:33
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 4 meses
Puntos: 21
Respuesta: Aprendiendo, sistema de usuarios

:P en realidad el "rango de inseguridad" que nombra zaetoner se puede evitar siempre y cuando depures el codigo como yo dije, htmlentities al username y md5 a la pass.
  #8 (permalink)  
Antiguo 19/12/2009, 19:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 154
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Aprendiendo, sistema de usuarios

lo de md5 ya lo tengo implementado, pero....cómo aplico lo de htmlentities?

olvídenlo, pensé que htmlentities era algo como md5, pero me he dado cuenta que solo transforma los carácteres especiales...

gracias.

moderador, puede usted cerrar este tema. (si quiere)

Última edición por guallox; 19/12/2009 a las 19:55
  #9 (permalink)  
Antiguo 19/12/2009, 19:57
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 4 meses
Puntos: 21
Respuesta: Aprendiendo, sistema de usuarios

de la misma forma que md5.

$username = htmlentities($username);

lo que hace htmlentities es por ejemplo los caracteres como ñ,áéíóú y caracteres raro lo cambia por su equivalente en html (&noacute; &aacute; ) la verdad que no me acuerdo los equivalentes en html pero es algo asi xD

Usando eso te evitas una inyeccion sql, hay formas diferentes para evitar esto como real_scape_string o algo asi...
  #10 (permalink)  
Antiguo 20/12/2009, 00:38
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Aprendiendo, sistema de usuarios

Cita:
Iniciado por zaetoner Ver Mensaje
en realidad eso tambien tiene un muy pequeño rango de inseguridad lo mejor es siempre usar:
Código PHP:
Ver original
  1. $usuario=$_POST['usuario'];
  2. $password=$_POST['password'];
  3.  
  4. $c=mysql_query("SELECT id FROM usuarios WHERE usuario='$usuario' and password='$password'");
  5.  
  6. if($a>0){
  7. echo "los datos son correctos";
  8. }elseif($a==0){
  9. echo "no coinsiden el nick con el password";
  10. }

y ademas le evitas cargas a tu servidor de este modo
De ese modo, creo que no es sensible a las minusculas y mayusculas :p
Es mejor seleccionar el usuario, y comprobar despues con un if como hace bioxido.
__________________
Half Music - www.halfmusic.com
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:39.