Foros del Web » Programando para Internet » PHP »

Optimizando autenticación

Estas en el tema de Optimizando autenticación en el foro de PHP en Foros del Web. Hola tengo una duda al evaluar una consulta (para autenticar usuarios) os agradecería que me dierais la opción(es) si hay más de una, que sean ...
  #1 (permalink)  
Antiguo 28/10/2004, 12:00
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 14 años, 1 mes
Puntos: 0
Optimizando autenticación

Hola tengo una duda al evaluar una consulta (para autenticar usuarios) os agradecería que me dierais la opción(es) si hay más de una, que sean seguras (soy bastante paranoico con el tema "seguridad"), uso PHP 5.
Como siempre... gracias!

Código PHP:
<?php
session_start
();

if (isset(
$HTTP_POST_VARS['userid']) && isset($HTTP_POST_VARS['password']))
{
  
// si el usuario intenta logearse
  
$userid $HTTP_POST_VARS['userid'];
  
$password $HTTP_POST_VARS['password'];

  
$db_conn mysql_connect('localhost''pruebas''');
  
mysql_select_db('auth'$db_conn);
  
$query 'select alias, pass from usuarios '
           
."where alias='$userid' "
           
." and pass=password('$password')";
  
$result mysql_query($query$db_conn);
 
/* En la siguiente línea... ¿qué es más seguro poner? if ($result>0) ¿o es mejor evaluar la consulta de otra manera? */
  
if ((?????????) >)
  {
    
// si está en la BD registro el usuario

    
$HTTP_SESSION_VARS['valid_user'] = $userid;    
  }
}
?>

Última edición por neofito; 28/10/2004 a las 12:18
  #2 (permalink)  
Antiguo 28/10/2004, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
$result = mysql_query($query, $db_conn);
/* En la siguiente línea... ¿qué es más seguro poner? if ($result>0) ¿o es mejor evaluar la consulta de otra manera? */
if ((?????????) >0 )
para tu caso concreto .. deberías usar al menos:
Código PHP:
$total=mysql_num_rows($result);
if (
$total == 1){
// usuario autentificado correctamente.

Fijate dos cosas:
1) se cuenta el total de registros que arrojó tu consulta ..
2) al usar un par de condiciones (usuario/password) se supone que son únicos .. así que el resultado esperado es 1 o 0 pero no > 0 ..

Como vas a usar esos datos del registro si se encuentra .. te viene bien usar mysql_num_rows() para contrar los registros que arroja una consulta .. Pero, dependiendo de los casos .. a veces suele ser más óptimo contar los registros que arroja una consulta usando SQL:

$sql="SELECT COUNT(*) FROM tabla WHERE .. condiciones";

Eso te arrojará un sólo registro con ese total ..
Código PHP:
$result=mysql_query($sql);
$total=mysql_result($result,0); 
Este tipo de consultas son más optimas . .pues es Mysql el que devuelve el resultado y no es un proceso de "PHP" al entregar Mysql todos los registros que se encontrasen bajo esas condiciones para luego contarlos. Eso sí, .. si luego quieras obtener esos datos (campos) de ese registro(s) si se encuentran (>0) .. tendrías que aplicar otro mysql_query() con el mismo SQL (sin COUNT()). Por eso si quieres "contar" y en función del resultado obtener el total .. para esos casos tal vez sea algo más óptimo usar mysql_num_rows().


Por otro lado ... si vas a usar sesiones .. no uses:
$HTTP_SESSION_VARS['valid_user'] = $userid;

usa en su defecto los arrays supergloblales:
$_SESSION

Sobre todo si vas a usar PHP 4.1.0 en adelante

más info sobre sesiones en:
www.php.net/session

Un saludo,
  #3 (permalink)  
Antiguo 30/10/2004, 03:35
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 14 años, 1 mes
Puntos: 0
Muchas gracias por la ayuda Cluster.

Salu2
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 23:03.