PHP - php con mysql

 
Vista:

php con mysql

Publicado por Aleks (27 intervenciones) el 23/08/2005 10:38:50
Hola a todos,

tengo un problemilla al realizar una consulta mysql...

Mexplico:

Tengo una serie de usuarios guardados en una tabla. Pretendo comparar el texto introducido en dos cajas de texto (nombre de usuario y password), con los valores almacenados en dos campos diferentes del mismo registro de una tabla de la BD, para restringir el acceso a mi aplicación. La conexión se hace bien, igual que el SELECT. Para buscar en cada registro de la tabla hago un "while(mysql_fetch_row($resultado))" siendo $resultado lo que devuelve la consulta mysql. Dentro del bucle hago las comparaciones de las cajas de texto con los campos de la tabla de la BD de esta manera:

if($_POST['user']==mysql_result($resultado,$cont,0))
if($_POST['password']==mysql_result($resultado,$cont,1))

$cont está inicializada fuera del bucle a cero, y se actualiza en cada pasada del mismo sumandose uno a sí mismo.

La cuestión es que solamente puedo entrar con el usuario que alfabeticamente este guardado el último en la BD. La búsqueda se hace bien, pero si escribo las credenciales de algun usuario presente en la BD que figure en cualquier posición que no sea la última (están ordenados alfabéticamente), nanay de la china....

Pues eso, alguien tiene idea de porqué me pasa eso?

Muchas gracias

Un saludo a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:php con mysql

Publicado por Jose A (238 intervenciones) el 23/08/2005 18:33:20
Hola, me parece q lo haces es listar todos y preguntar en cada iteración si ese registro en particular es igual al q has ingresado en la caja, bueno no te recomiendo eso ya que primero gastas más recursos de los necesarios y segundo tienes el problema q solo te acepta el ultimo ya que si está en el primero cuando pase al 2 registro te retorna falso,
lo q te recomendaria es primero q tu campo login sea unique para q no acepte 2 o más logins iguales, segundo cambiar tu sql
$us=$_POST["user"];
$cl=$_POST["password"];
$res=mysql_query("select * from usuarios where campo_login='$us' and campo_clave='$cl'");
if (mysql_num_rows($res)>0) //si la cantidad de filas encontradas coincidentes es >0, será cero cuando el login o la clave sean incorrectos
{
//si quieres mostrar algo
$row=mysql_fetch_array($res);
echo "login=";
echo $row["campo_login"];
}
else
{
echo "acceso denegado";
}

bueno, espero te sirva

Suerte y saludos

José A
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PELIGRO, CODIGO MALO

Publicado por Mike79 (669 intervenciones) el 23/08/2005 23:12:49
Heyyy, peligro Will Robinson.

El codigo que acabas de poner es subsetible a ataques por inyección de SQL.
José A.¿Que páginas has desarrollado? Me pudes platicar por favor? PAra ver si podemos entrar a algun par de ellas.

NUNCA ESCRIBAN UN CODIGO ASÍ, ES PELIGROSO.

Lo correcto es que el usuario sea unico (Como ya lo mencionaste), por lo tanto si es unico, un SQL de la siguiente forma bastaria:

"select * from usuarios where campo_login='$us'";

Y luego Revisas que el Campo Passwd sea igual a la variable $cl.
De esta forma escribes más codigo, pero vuelves tu página más segura.

No les voy a platicar como burlar el codigo que el compañero acaba de escribir, pero si buscan en google, lo más probable es que la primera página que regrese explique como hacerlo.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PELIGRO, CODIGO MALO

Publicado por Jose A (238 intervenciones) el 23/08/2005 23:28:22
Hola Myke, gracias por la corrección, por favor podría decir cual sería la vulnerabilidad? eso sin tener en cuenta la codificacion MD5 ni el uso de codigos de imágenes.

Gracias realmente

Jose A
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PELIGRO, CODIGO MALO

Publicado por Mike79 (669 intervenciones) el 24/08/2005 02:56:20
Así, tal y como pusiste el codigo, yo solo tengo que poner en el campo de:
Login: usuario
Passwd: ' OR '' = '

Lo cual daria el siguiente SQL:
"select * from usuarios where campo_login='usuario' and campo_clave='' OR ''='' "

Ejemplo:

-----------
mysql> insert into Usuarios values("usuario","algo");
Query OK, 1 row affected (0.01 sec)

mysql> insert into Usuarios values("usuario2","algo2");
Query OK, 1 row affected (0.02 sec)

mysql> insert into Usuarios values("usuario3","algo3");
Query OK, 1 row affected (0.01 sec)

mysql> insert into Usuarios values("otro","otro");
Query OK, 1 row affected (0.03 sec)

mysql> select * from Usuarios where Login='usuario' and Passwd='' OR ''='';
+----------+--------+
| Login | Passwd |
+----------+--------+
| usuario | algo |
| usuario2 | algo2 |
| usuario3 | algo3 |
| otro | otro |
+----------+--------+
4 rows in set (0.00 sec)

-----------
Como vez, ni siquiera tengo que conocer el usuario para entrar, siempre regresara todos los usuarios. Y eso solo es un ejemplo sencillo.

Te repito, busca en internet y encontraras muchos ejemplos.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PELIGRO, CODIGO MALO

Publicado por Mike79 (669 intervenciones) el 24/08/2005 02:58:41
¿Entonces que?
¿No quieres pasar algunas páginas que hallas hecho?
Chanse le encontremos algun error parecido, aunque no te garantizo que no les pase nada a tus páginas.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PELIGRO, CODIGO MALO

Publicado por Aleks (27 intervenciones) el 24/08/2005 10:15:28
Bueno, bueno....
Muchas gracias por la ayuda. No me di cuenta en mi codigo de que dentro del bucle que buscaba no había puesto que al encontrar el resultado dejara de buscar, por eso solamente podia entrar el último usuario definido en la BD. De todas maneras, lo he cambiado para buscar a través del nombre, así me funciona mucho mejor.

Gracias por la ayuda. Sois cojonudos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar