Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

+ problemas con autentificator

Estas en el tema de + problemas con autentificator en el foro de Sistemas de gestión de contenidos en Foros del Web. Hola sigo teniendo problemas con al autentificator y la gente que tiene firewall. He estado mirando el código y no veo donde puede estar el ...
  #1 (permalink)  
Antiguo 08/06/2003, 09:13
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 9 meses
Puntos: 2
+ problemas con autentificator

Hola sigo teniendo problemas con al autentificator y la gente que tiene firewall.
He estado mirando el código y no veo donde puede estar el problema.
el codigo del auteverifica ahora mismo es el siguiente:
Código PHP:
// Cargar datos conexion y otras variables.
require ("aut_config.inc.php");



// chequear página que lo llama para devolver errores a dicha página.
$venimos$_SERVER['PHP_SELF'] ;
    
$dato =$_SERVER['QUERY_STRING'];
    
$donde$venimos."?".$dato;
$url explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;

// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (
header ("Location: entrar.php?donde=$donde"));
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['usuario']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die(header ("Location:  $redir?error_login=0&donde=$donde"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT id_usuario,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['usuario']."'") or die(header ("Location:  $redir?error_login=1&donde=$donde"));

 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {

    
// eliminamos barras invertidas y dobles en sencillas
    
$login stripslashes($_POST['usuario']);
    
// encriptamos el password en formato md5 irreversible.
    
$password md5($_POST['pass']);

    
// almacenamos datos del Usuario en un array para empezar a chequear.
     
$usuario_datos mysql_fetch_array($usuario_consulta);
  
    
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    
mysql_free_result($usuario_consulta);
    
// cerramos la Base de dtos.
    
mysql_close($db_conexion);
    
    
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    
if ($login != $usuario_datos['usuario']) {
           
Header ("Location: $redir?error_login=4&donde=$donde");
        exit;}

    
// si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    
if ($password != $usuario_datos['pass']) {
        
Header ("Location: $redir?error_login=3&donde=$donde");
        exit;}

    
// Paranoia: destruimos las variables login y password usadas
    
unset($login);
    unset (
$password);

    
// En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
     // le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_datos['id_usuario'];
    
    
// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];
    
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_datos['usuario'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['pass'];

    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
    
   
} else {
      
// si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      
Header ("Location: $redir?error_login=2&donde=$donde ");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();
$venimos$_SERVER['PHP_SELF'] ;
    
$dato =$_SERVER['QUERY_STRING'];
    
$donde$venimos."?".$dato;
// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();

die (
header ("Location: entrar.php?donde=$donde"));
exit;

}
}
?> 
Todo va perfectop en principo pero recibo quejas y la gente quye se queja es que tienen firewall, porque puede ser?
Por las cookies no puede ser porque con otras sistemas les funcionan

Yo creoq ue le error esta aqui peor no se porque
Código PHP:
 // Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();

die (
header ("Location: entrar.php?donde=$donde"));
exit;

}
}
?> 
Un saludo

Última edición por lochorui; 08/06/2003 a las 09:17
  #2 (permalink)  
Antiguo 08/06/2003, 16:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Donde indicas el error no puede ser ... pues esas variables son las de la sesión y se obtienen del "Servidor" ..

Como mucho puede ser que el firewall .. limite las llamadas a las variables de servidor vía $_SERVER .. osese .. mejor dicho que el firewall impida que el servidor HTTP las pueda obtener (página referida y el nombre y ruta de la misma página) por eso no quedan disponibles para php en $_SERVER ...

Un solución .. es no usar las llamadas a $_SERVER y poner directamente en $redir la página que contenga tu formulario de login ..

$redir="login.php"; // o como lo llames ..

Con eso sólo limitaras a Autentificator a que pueda usar varios formularios de login para tu sistema y deberá ser uno sólo (el que indiques ahí ..).

Por lo demas, igualmente se va a revisar si se está haciendo un "login" por el formulario .. y si no se detectan esas variables se va a proceder a mirar en las variables de sesión .. Pese que hagan un acceso directo al script. En ese caso, si hacen un acceso directo a una página de tu "zona" protegida si no hay variables de sesion ni las variables del formulario (POST) .. se le va a mandar a tu "entrar.php" como así lo tienes ahora ..

(te recomiendo que uses el script original y simplemente quites las referencias a $_SERVER del código y uses un $redir por defecto com te he comentado ..)


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 08/06/2003, 16:43
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 9 meses
Puntos: 2
Hola cluster , el script original lo utilizo en la autentificacion de músicos y me pasa lo mismo.

No se que es pero me esta volviendo completamente loco.

Un saludo
  #4 (permalink)  
Antiguo 08/06/2003, 17:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te estoy dando la alternativa de que uses el script original y QUITES toda referencia a $_SERVER .. y uses $redir="tu_login_formulario.php" ..

Eso es lo que he pretendido decirte ..

Lamentablemente como ya he dicho antes .. nadíe me ha reportado problemas con firewalls .. (ni mas detalles sobre las pruebas ni que configuración de esos firewalls ni nada de nada . .por ende me es imposible llegar alguna conclusión o dar alguna solución si está dentro de mis conocimientos ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 08/06/2003, 20:01
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 9 meses
Puntos: 2
Thanks cluster , con eso funciona perfectamente.

Con lo que me he mirado ese codigo que casi me lo se de memoria , en cuanto quite esto:

Código PHP:
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (
header ("Location: entrar.php?donde=$donde"));
exit;

todo va perfecto .

Esta parte para que era?.

Un saludo
  #6 (permalink)  
Antiguo 08/06/2003, 20:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues esa parte es para salir rápido del script si accedes directamente a aut_verifica.inc.php (por ejemplo que hagas algo típo: http://www.tusitio.tal/aut_verifica.inc.php ) .. O para evitar accesos directos a una página de tu "zona protegida" si no viene de otra página (de la secuencia de tu formulario de login -> una página autentificada -> otra .. etc ..)

De esa forma (en el script original) salta el error cod. 1 y se termina el script (sin hacer crear una sesion nueva).

Esa variable de servidor "HTTP_REFERER" no lo suelen dar todos los servidores HTTP (bien por qué el cliente acceda desde un proxy o por qué lo limite de otra forma ..).

También esa variable "HTTP_REFERER" me sirve para saber que página está llamando al script y en consecuencia (en el script original) devolver el código de error (los de login de usuario no correcto, o password no correcta . etc ..) a la página que lo llama (normalmente será a tu formulario que uses ..)

Para próximas versiones .. me estoy replanteando quitar esa parte del código .. Pues si bien es "optimo" y hace que el script sea más versatil (pues no depende de un formulario de login mio sino que tu puedes crear el que quieras .. y no sólo uno sino los que quieras simultáneamente ) dá problemas cómo ya has podído comprobar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 08/06/2003, 20:33
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 9 meses
Puntos: 2
Ok cluster , seria bueno , xq yo si meto u directamente un link a un sitio portegido me sigue mandadno a entrar.php.

ya la ultima pregunta , como puedo hacer para que aunq el user meta su user o pass sin distinguier minusculas d mayusculas pueda acceder?

Por que sino le dice user incorecto.

Un saludo y mil gracias ,ya respiro trankilo , esto em estaba matando

Última edición por lochorui; 08/06/2003 a las 20:39
  #8 (permalink)  
Antiguo 08/06/2003, 21:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
mm Pues lo bueno que tienen los passwords que sean "case sensitive" es eso mismo .. que sean sensible a mayusculas ...

Pero bueno .. si quieres que Msyql "le de igual" si son mayusculas o minusculas .. Podrías hacer:



Código PHP:
$usuario_consulta mysql_query("SELECT id_usuario,usuario,pass,nivel_acceso FROM $sql_tabla WHERE LOWER(usuario)='".strtolower($_POST['usuario'])."'") or die(header ("Location:  $redir?error_login=1&donde=$donde")); 
Osease .. convertimos el campo "usuario" de la BD a minusculas (con LOWER() de Msyql .. ) y hacemos lo mismo con $_POST['usuario'] pero en PHP con strtolower() ...

Eso para el "usuario" ..

Ahora para la contraseña se complica .. Lo que se guarda en la BD es un "MD5()" encriptado .. así que si queremos comparar en "minusculas" .. Primero deberíamos guardar en minusculas la constrasea (es decir .. antes de aplicar MD5() .. pasar la cadena del password a minusculas .. y hacer el INSERT (lo mismo para UPDATES..).

Bueno .. la "técnica" ahí la tienes si quieres implementarlo . jeje adelante.

Lo que soy yo . .prefiero contraseñas "case sensitive" .. Avisalo a tus usuarios que lo tengan en cuenta y escriban sus contraseñas en minusculas por ejemplo .. El que quiera "seguridad" ya escribirá sus contraseñas usando minusculas y mayusculas ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 08/06/2003, 21:15
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 9 meses
Puntos: 2
ok bueno eso de momento lo voy a dejar asi por cuestiones de "seguridad" jeje

Ya la última y no molesto mas en un par de días .

Quiero que el index deopendiedno d si el user ha sido validado ya o no muetsre el form o no enmtonces estoy probando y siempre me sale como no validado
hago lo sigueinte:
Código PHP:
<?
    
if(isset($_SESSION['usuario_login'])){
require (
"aut_verifica.inc.php")
$nivel_acceso=10;
if (
$nivel_acceso $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
        echo
"validado";
///aqui iria el index sin form
} else {
echo
"no validado";
// aqui iria el index con form
}

?>
un saludo y mil GRACIAS
  #10 (permalink)  
Antiguo 08/06/2003, 21:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues para hacer eso que pretendes .. Autentificator no se diseñó .. asi que tendrías que hacer varios cambios ..

Por ejemplo ... No puedes leer una variable de sesión si no se ha iniciado la sesión via session_start() y .. ademas lo que es Autentificator usa nombre própio para la sesión (eso lo hace via session_name($usuarios_sesion); antes del session_start() ...

Por lo tanto .. a la hora que quieres hacer tu "if" antes de incluir a aut_verifica.inc.php (que es donde hace todo eso ..) no estás bajo ninguna sesión (y menos la activa de autentificator) ..

Ahora, .. podrías hacerlo "a mano" .. haciendo:

Código PHP:
<?
// Cargar datos conexion y otras variables.
require ("aut_config.inc.php");

session_name($usuarios_sesion);
session_start();

 if(isset(
$_SESSION['usuario_login'])){
require (
"aut_verifica.inc.php");

// resto tu script ...
Pero, tendrías que editar aut_verifica.inc.php y quitar la llamada al require ("aut_config.inc.php"); (pues ya lo has cargado antes según este ejemplo) y quitar las referencias a esas session_xxx() que puse ahí en el ejemplo .. Habría que probarlo pues hay un session_destroy() por ahí que hay q verlo ...

A su vez .. en las páginas que ya usabas autentificator deberías usar el código como en esta de tu "index.php" .. Pues si modificas el aut_verifica.inc.php te podras dar cuenta que estás quitandole código .. mejor dicho "estas sacando" el código fuera de ese script ...

En resumen .. Autentificator se hizo para "zonas de sólo usuarios" .. no para usarlo como la autentificación de un "PHP-Nuke" donde al entrar al sitio ya se abre una sesión y si te registras se crean las variables de sesión necesarias para validar al usuario en las páginas que así lo requieran ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 05:52.