Foros del Web » Programando para Internet » PHP »

Envío de Link cuando uso Autentificator

Estas en el tema de Envío de Link cuando uso Autentificator en el foro de PHP en Foros del Web. Que tal, Uso el Autentificator de Cluster Tengo una duda. Tengo mi sistema Online, y pienso programar unas notificaciones vía email, por ejemplo cuando una ...
  #1 (permalink)  
Antiguo 03/11/2005, 11:07
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 12 años, 2 meses
Puntos: 0
Envío de Link cuando uso Autentificator

Que tal,

Uso el Autentificator de Cluster

Tengo una duda.

Tengo mi sistema Online, y pienso programar unas notificaciones vía email, por ejemplo cuando una información es editada se enviará un mail al un usuario diciendo:

la información ha sido modificada, para mas detalles haga click aquí

http://www.pagina.com/mi_proyecto/mi_pagina.php?id=183

Mis usuarios por ejemplo que están trabajando en línea ya están Logueados y tienen su sesión creada en el server, yo mismo he hecho la prueba con un link por ejemplo:

http://localhost/mi_proyecto/mi_pagina.php?id=183


Pero me envía a la página que notifica que el usuario no se encuentra Logueado........Por que? si los usuarios están viendo otras páginas, están logueados, etc.???

A qué se debe? Como puedo corregirlo para que el link sea Efectivo? es decir si ya están logueados, los deje ver la pagina, sino les notifique que no se han logueado.

Saludos y Gracias de Antemano.
  #2 (permalink)  
Antiguo 03/11/2005, 11:28
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 12 años, 4 meses
Puntos: 0
Bueno, en primera instancia cuando usas un link desde un correo viene sin la variable

$_SERVER['HTTP_REFERER']);

me imagino que caes a
Código HTML:
Error cod.:1 - Acceso incorrecto!
Si eso es correcto indicame por favor tu correo-e para enviarte algunos cambios para que me funcione

Saludos

Frank
  #3 (permalink)  
Antiguo 03/11/2005, 11:59
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 12 años, 2 meses
Puntos: 0
Que tal gonzalezmfrank,

Si vieras que yo había desactivado esa opción del Autentificator, como se ve en este post:

http://www.forosdelweb.com/f18/funciona-firefox-pero-da-error-headers-con-iexplorer-339910/

Porque necesitaba trabajar con nuevas ventanas pequeñas abiertas vía javascript.

Pero bueno, la cuestión es que simplemente pruebo esta clase de URL completas, estando logueado y falla.

No te entendí lo de la ayuda, pero te agradezco que postees aquí la posible solución para que todos la tengan.

Saludos y Gracias.
  #4 (permalink)  
Antiguo 03/11/2005, 12:11
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 12 años, 4 meses
Puntos: 0
Bueno...

En principio no me interesaba perder la pagina desde la cual estaba haciendo referencia por lo cual decidi incluir las variables $user_mail y $user_pass para cuando viniese el acceso via LINK y no como resultado de un FORM

Código PHP:
<?

include("config.php");

// chequear página que lo llama para devolver errores a dicha página.

$url explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == "") {
   if (isset(
$user_mail) && isset($pass_mail)) {
      
$redir=$urlhome.'/index.php';
   } else {
      die (
"Error cod.:1 - Acceso incorrecto!");
      exit;
   }
}

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

// 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.
require ("conectar.php");

// dependiendo de si viene del mail o de la session
if (isset($_POST['user']) && isset($_POST['pass'])) {
   
$user_id strtoupper($_POST['user']);
   
$pass_id strtoupper($_POST['pass']);
   
$login strtoupper(stripslashes($_POST['user']));
} else {
   
// aca debe venir solo del link
   
$user_id $user_mail;
   
$pass_id $pass_mail;
   
$login $user_mail;
}

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT ID,usuario,pass,nivel_acceso,fecha_pass,status FROM $sql_clientes WHERE usuario='$user_id'") or die(header ("Location:  $redir?error_login=1"));

 
// 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 = strtoupper(stripslashes($_POST['user']));
    // encriptamos el password en formato md5 irreversible.
    
$password md5($pass_id);
    if ( isset(
$_POST['pass']) ) {
       
$passwordv $_POST['pass'];
    } else {
       
$passwordv $pass_id;
    }

    
// 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");
        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'] and $passwordv != $usuario_datos['pass'] ) {
        
Header ("Location: $redir?error_login=3");
        exit;}
    
    
// Revisamos las fecha del dia con la fecha de registro de la BD
    // si  el password tiene generado 30 dias o mas, redirecciona hacia la pagina de error
    
$date1=date("Y-m-d");
    
$date2=$usuario_datos['fecha_pass'];
    
$s1 strtotime($date1)-strtotime($date2);
    
$d1 intval($s1/86400);
    
$d2 30 $d1;
    if (
$d1 >= 30) {
        
Header ("Location: $redir?error_login=7");
        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'];
    
    
// 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 autentica que servirá como segunda validacion de autenticacion del usuario
    
$_SESSION['usuario_autentica']=$usuario_datos['status'];
    
    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['pass'];
    
$_SESSION['usuario_passwordval']=$passwordv;
    
    
//definimos cambiar_password con el valor 1 si es necesario que se cambie el password
    //Si faltan 10 dias o menos para que expire el password emite el error indicando en la variable $d2 el numero de dias que le quedan
    
if ($d2 <= 10) {
        
$_SESSION['cambiar_password']=1;
        
Header ("Location: $redir?error_login=8&d2=$d2");
        exit;}
        
    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
if ( isset($_POST['pass']) ) {
       
$pag=$_SERVER['PHP_SELF'];
       
Header ("Location: $pag?");
       exit;
    }
   } 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");
      exit;}
} else {

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

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// 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 (
"Error cod.:2 - Acceso no autorizado!");
exit;
}
}
?>
Esto tomando en cuenta que los datos que vienen del link vendrán con las mismas caracteristicas de las ques están en la Base de Datos

Espero te sirva... si tienes alguna observacion por favor indicamela

Saludos

Frank
  #5 (permalink)  
Antiguo 03/11/2005, 14:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por SOFIA_ME_GUSTA
Que tal,

Uso el Autentificator de Cluster

Tengo una duda.

Tengo mi sistema Online, y pienso programar unas notificaciones vía email, por ejemplo cuando una información es editada se enviará un mail al un usuario diciendo:

la información ha sido modificada, para mas detalles haga click aquí

http://www.pagina.com/mi_proyecto/mi_pagina.php?id=183

Mis usuarios por ejemplo que están trabajando en línea ya están Logueados y tienen su sesión creada en el server, yo mismo he hecho la prueba con un link por ejemplo:

http://localhost/mi_proyecto/mi_pagina.php?id=183


Pero me envía a la página que notifica que el usuario no se encuentra Logueado........Por que? si los usuarios están viendo otras páginas, están logueados, etc.???

A qué se debe? Como puedo corregirlo para que el link sea Efectivo? es decir si ya están logueados, los deje ver la pagina, sino les notifique que no se han logueado.

Saludos y Gracias de Antemano.
Así funcionan las sesiones .. recuerda que no usas cookies sino que sólo propagas el SID en una cookie y lo más probable con tiempo de expiración "0" (revisa tu configuración de PHP).

Otra prueba .. ten tu sitio abierto y haz un link a mano en tu navegador que apunte a una página de tu sitio .. No debe dejarte entrar "por atras".

Pero si lanzas un sitio -desde- el tuyo si, .. el SID se sigue propagando .. de la otra forma (habría que ratificarlo viendo el SID generado) se genera otro diferente .. es decir, abres otra sesión diferente.

Pruebalo .. imprime el valor de SID:
echo SID;

y observa ....

Un saludo,
  #6 (permalink)  
Antiguo 03/11/2005, 14:34
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 12 años, 2 meses
Puntos: 0
Si Cluster efectivamente, no me deja entrar tipeando la URL.............entonces si requiero de enviar un link como ya lo mecioné, como puedo solucionarlo?

???
  #7 (permalink)  
Antiguo 03/11/2005, 14:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues no podrás hacerlo hacia una página autentificada usando sesiones, tendrías que usar COOKIE para tal fin.

De hecho podrías usar un "hibrido" entre sesiones y cookies, .. es decir .. creas tu cookie para efectos de "recordar contraseña" .. y si está creada, autentificas y pasas a usar sesiones (forosdelweb.com lo usa así para ofrecer esa funcionalidad de "recordar contraseña").

Un saludo,
  #8 (permalink)  
Antiguo 03/11/2005, 16:29
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 12 años, 2 meses
Puntos: 0
Que tal Master,

Gracias por la Ayuda...........Me acabas de hablar en Chino.....je, je, pero bueno.

Desde el punto de vista práctico:

1. Tengo el sistema de sesiones Funcionando
2. Debo de enviar un Link hacia "adentro" del sistema que usa sesiones

Lo de la Cookie cambia todo?
El híbrido ha de ser modificando el autentificator para que "cree" la cookie cuando se autentica, entonces cuando intento "linkear" externamente "lea" la cookie y no la sesion como tal y así pueda entrar?

Para esto supongo habría que sincronizar el Logout de las sesiones con la "destrucción" de la cookie?


Graicas por los conceptos,

Si me enumeras los pasos que debo seguir, he de lograrlo.

Saludos
  #9 (permalink)  
Antiguo 04/11/2005, 05:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El uso "hibrido" de sesiones y cookies como te propongo se trata de:

1) Al autentificar tu usuario:
1.a) Creas una cookie con el usuario/password (encriptado el password en MD5 .. justo lo que tienes en tu BD en el pass del usuario)
1.b) Creas tus variables de sesión como lo haces actualmente.

2) Al validar a tu usuario (en las páginas que requieran autentificación)
2.a) Compruebas la existencia de tu variable de sesión. Si existe .. validas como lo haces actualmente.
2.b) Si no existe la sesión .. buscas la cookie validando la existencia de la cookie creada en 1.a .. si existe .. autentificas a tu usaurio con esos datos (usuario y pass) que tienes en la cookie continuando con el punto 1.b (creando tu sesión).
2.c) Si no exite la cookie (ya no existió para este paso tampoco la sesión) .. El usuario no está para nada autentificado en el sistema, ni activó la opción "recordar usuario" (hablo de esa funcionalidad .. por qué eventualmente en alguna otra aplicación no te interesará usarla .. En tu caso por defecto se "recuerda al usuario" por esa cookie).

Un saludo,
  #10 (permalink)  
Antiguo 04/11/2005, 05:43
Avatar de gonzalezmfrank  
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 12 años, 4 meses
Puntos: 0
Buenos Dias...

Pero el uso de las cookies no vulnera la seguridad en el caso de que los usuarios esten accesando las aplicaciones desde terminales publicos ?, digo porque a una cookie se definen unas variables y estas quedan en el navegador del cliente, el peligro a mi modo dever es si el usuario abandona momentaneamente el equipo no queda este vulnerable ?, habria que bloquear los historiales ?

Saludos

Frank
  #11 (permalink)  
Antiguo 04/11/2005, 06:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, .. las cookies al permanecer esos datos en el cliente son fácilmente accesible y alterados .. Pero, no hay que tenerle miedo .. sólo saber usarlas.

Por eso ya hago el comentario que el "password" que se envia a la cookie ha de ser encriptado con MD5() mínimo .. el cual ya tenemos (en mi caso como lo gestiono con Autentificator) encriptado también con MD5() en la BD.

Es más .. hay muchos sistemas que en partes críticas de la aplicación requieren una vez más de la contraseña para hacer determinados procesos .. Por ejemplo .. un sistema que maneje cookies+sesiones como propongo .. debería pedir nuevamente la contraseña si desea por ejemplo el usuario cambiar algún dato de su perfil (sobre todo si se dá la opciónd de cambiarse uno mismo la contraseña).

No es seguro el sistema .. pero ahí en esos casos hay que poner en una balanza lo que uno desea de sus sistemas .. seguridad vs funcionalidad (como es el caso del problema de SOFIA_ME_GUSTA)

Un saludo,
  #12 (permalink)  
Antiguo 04/11/2005, 08:22
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 12 años, 2 meses
Puntos: 0
Bueno,

Entonces la Lista de tareas es:

1. Crear una cookie con user/pass encriptado en el momento en que se crea la sesión.

2. Adicionar en el verificador de sesión que verifique también si la cookie existe, si alguna de las dos existe el usuario estaría "adentro", sino no ha de entrar.

3. Sincronizar el Logout con la destrucción de la Cookie


Así cuando envíe el Link a mis usuarios estos entrarán validados por la cookie.

gonzalezmfrank, bueno el comentario de seguridad de la estación de trabajo, que no hay que olvidarlo nunca.

Ahora, para hacer lo de la cookie voy a partir de aquí (cuando tenga tiempo) :

http://www.forosdelweb.com/showthrea...513#post312513

Algún otro Comentario...

Gracias Masters...
  #13 (permalink)  
Antiguo 04/11/2005, 09:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sólo ten en cuenta el uso de la validación según te propongo en el punto 2 de mi anterior exposición ..

Podrías usar simplemente cookies para todo el sistema y olvidarte de las sesiones por completo .. Yo prefiero sistemas "hibridos" como la propuesta que te hago, ... con el objetivo de poder ofrecer a mis usuarios o aplicaciones la opción de "recordar el login" para proximas conexiones (en el tiempo que tu cookie determine) o no ...

Un saludo,
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 14:51.