Foros del Web » Programando para Internet » PHP »

problemas con un PHP!!!

Estas en el tema de problemas con un PHP!!! en el foro de PHP en Foros del Web. Bue... tengo un problema con un php, que no puedo hacer correr, debe ser porque soy medio salame ó porque aún no se que tan ...
  #1 (permalink)  
Antiguo 17/01/2003, 18:36
 
Fecha de Ingreso: diciembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
problemas con un PHP!!!

Bue... tengo un problema con un php, que no puedo hacer correr, debe ser porque soy medio salame ó porque aún no se que tan salame soy, la cosa es así; tengo un script para restricción de páginas y no logro hacerlo andar en el server, el cual tiene instalado el PHP como modulo, cosa que requiere este script. Les paso tal cual lo tengo en mi página.


<?php // elnombredemipagina.com
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}

$fich = file("passwords.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
$i++;
}

if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<!-- elnombredemipagina.com-->
<html>
<head>
<title>Clientes</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php echo $PHP_AUTH_USER?>.
</body>
</html>


bien, así es como lo tengo, seguramente, debe ser porque le falta editar algo, pero la verdad es que no se que. Aviso que el passwords.txt ya lo tengo, que me aparece la famosa ventanita para colocar el user y pass, pero de ahi no pasa, parece que no aceptara los datos. Lo edite, lo poco que cambie, en un editor de texto y lo guarde como clientes.phtml, luego como, .php los subí y los probé, primero uno y luego otro y nada. Les recuerdo que tal cual figura ahi, es como lo tengo. Si algún habilidoso para el tema me da una mano...agradecido. muchas gracias!!!!!
  #2 (permalink)  
Antiguo 17/01/2003, 18:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Revisa la configuración de tu servidor ( .. con un <? phpinfo(); ?> lo puedes ver) .. Mira como usas la directiva register_globals ... es probale que trabaje a OFF .. si es así .. el acceso a las variables de servidor como las q usa se han de hacer por su array asociado (superglobal):

Código PHP:
if (($_SERVER['PHP_AUTH_USER']==campo[0]) && ($_SERVER['PHP_AUTH_PW']==chop($campo[1]))) {
$validado=true;
}
$i++;

por lo demas .. me gusta mas usar {} de apertura y cierre donde correspondan y no asumir q si no se usan en un condicional IF por ejemplo se ejecuta solo la misma linea si es verdadero ...

mm me di cuenta q se usan mas PHP_AUTH_xxx .. usa la foma de acceso como la del ejemplo: $_SERVER['...'] en todas las apariciones ..


Un saludo,
  #3 (permalink)  
Antiguo 18/01/2003, 15:26
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Cuando dices "que de ahi no pasa", ¿que quieres decir? ¿Que te vuelve a preguntar por el usuario y clave? ¿O que se queda en blanco pensando y no te muestra ni los datos ni te pide usuario y clave?

Puede que se que colgado con el while que recorre el fichero de usuarios. Prueba a sustituir
Código PHP:
$fich file("passwords.txt");
$i=0$validado=false;
while (
$fich[$i] && !$validado) {
$campo explode("|",$fich[$i]);
if ((
$PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
$i++;

por algo como
Código PHP:
$fich file("passwords.txt");
foreach (
$fich as $user_pw)
{
  
$campo=explode("|",$user_pw);
  if ((
$PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) 
  {
    
$validado=true;
    break;
  }

Ademas, usa $_SERVER como te recomienda Cluster. Y para comprobar que es lo que realmente falla, sustituye el codigo que recorrede el fichero por una comprobacion mas simple, comparando directamente con una cadena.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 19/01/2003, 13:45
 
Fecha de Ingreso: diciembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Me pide nuevamente el pass

A lo que me refiero, cuando digo que se cuelga, es a que me pide nuevamente el pass, como si no lo reconociera. Tengo otra pregunta; me dijeron que es necesario que en el archivo passwords.txt debe tener las contraseñas encriptadas por el htpasswd, ya que el apache las busca encriptadas, para poder chequearlas... ¿esto es así?. Ahora estoy por probar lo que me indica cluster, espero funcione.
  #5 (permalink)  
Antiguo 19/01/2003, 14:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Lo de el htpasswd solo es necesario si harias la autentificacion HTTP via el fichero htaccess de apache. Pero tu lo quieres hacer por HTTP via PHP. Por lo cual "no" es necesario encriptarlo. Pero lo que si tendrias que hacer es proteger el fichero passwords.txt, por que tal como lo pones en el codigo el fichero esta en el mismo directorio que el script PHP, por ejemplo en la URL http://dominio.com/secreto/ . ¿Que pasa si pones en el navegador http://dominio.com/secreto/passwords.txt ? Pues que se lee todo el fichero. Una forma de "protegerlo" el guardandolo en una carpeta que no sea accesible via URL. Por ejemplo, si la carpeta raiz de tu sitio es c:/pub/www/ , podrias guardar el fichero en c:/password/passwords.txt . Asi solo podran acceder al fichero si consigen tener acceso al sistema de fichero. Y si no necesitas tener acceso al texto "real" de la clave, podrias guardarla encriptada con la funcion
md5() y luego comparar ese valor guardado con el valor encriptado de PHP_AUTH_PW.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 08:51.