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

Modificación del "autentificator"

Estas en el tema de Modificación del "autentificator" en el foro de Sistemas de gestión de contenidos en Foros del Web. No se si la modificación está bien, si es segura o si hay otra forma de hacerlo pues no llego ni a novato en PHP. ...
  #1 (permalink)  
Antiguo 25/05/2003, 07:40
 
Fecha de Ingreso: enero-2002
Mensajes: 94
Antigüedad: 22 años, 3 meses
Puntos: 0
Modificación del "autentificator"

No se si la modificación está bien, si es segura o si hay otra forma de hacerlo pues no llego ni a novato en PHP.

Es para que con el script "autentificator" en lugar de restringir el acceso a una página entera lo que haga es si el usuario está logueado muestre por ejemplo un menú de usuario o si no lo está muestre un formulario de login.

si alguien puede revisar el código para ver si está bien...



así quedaría el archivo "aut_verifica.inc.php" ( los cambios están encuadrados entre // ------------------------------- ) Hay un ambio al principio y al final

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

// --------------------------------------------------------------------------------------------
// quito esto para que no me de error cada vez que entro en la 
//página y defino una página en la variable $redir para que el 
//error salga en esa página y no tener que usar "http_referer"
// Página a la que devolver los errores.
//$url = explode("?",$_SERVER['HTTP_REFERER']);  
//$pag_referida=$url[0];   
$redir"error.php";
// chequear si se llama directo al script.
//if ($_SERVER['HTTP_REFERER'] == ""){   
//die ("Error cod.:1 - Acceso incorrecto!");  
//exit;     
//}    
// --------------------------------------------------------------------------------------------



// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && 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"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") 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 stripslashes($_POST['user']);
    
// 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");
        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");
        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 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_...
    
$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();


// --------------------------------------------------------------------------------------------
// quito esto
//die ("Error cod.: 2 - Acceso incorrecto!");
//exit;
// --------------------------------------------------------------------------------------------


}
}
?>

y en las diferentes páginas donde quiero que se mire si está loggeado o no pongo:

Código PHP:
require ("aut_verifica.inc.php"); 
y donde quiero que salga una opción para los usuario si están loggeados o para los invitados si no lo están meto esto

Todos los usuarios en la base de datos tienen nivel 1, así si están loggeados les aparece lo de menu_logged.php y si no estan loggeados, como la variable de sesión "usuario_nivel" no está definida, no es igual a 1, y aparece lo de menu_no_logged.php

Código PHP:
$nivel_acceso=1;
if (
$nivel_acceso != $_SESSION['usuario_nivel']){
include(
"usuarios/menu_no_logged.php");
}
else
{
include(
"usuarios/menu_logged.php");

  #2 (permalink)  
Antiguo 25/05/2003, 12:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
En principio se ve bien ...

AL quitar la lógica del principio (lo del $pagina_referida y todo lo demas) .. Estas limitando el uso de tu "versión" de Autentificator.

Autentificator .. por esa lógica lo que hace es enviar los errores si los hay (de login) a la página que los llama. Con lo cual se hace versatil el uso del script sin tocar nada del código interno .. (en tu caso lo mandas a tu página de nombre fijo error.php .. donde supongo que usaras el código para mostrar el mensaje de error que corresponda y un link o el mismo formulario de "login" de tu sistema ..)

Pero, es eso sólo .. es tu modificación y estás en tu derecho de hacerla (Autentificator está bajo licencia GPL .. así que puedes hacer las modificaciones que quieras siempre y cuando respetes los créditos del autor original y te añadas tu mismo con las modificaciones que les has hecho ..).

El quitar el "die()" último .. no afecta para nada la "seguridad" siempre y cuando uses el código que hiciestes con tus "include()" hacia el menú que le corresponda.

Lo que no sé si despues de ese código tuyo (el último con tus include() ..) Tienes un script donde haces condicionales tipo:

Código PHP:
if($_SESSION['usuario_nivel'] == 1) {
// ejecutas tu código .... que sólo sea para ese nivel de usuario ...

Supongo que así lo haras . y si no lo haces así debes usar tus própios scripts .. tomando en cuenta el nivel del usuario (bajo un condicional ..) para ejecutar el código que correspona, quedando el resto del script como de acceso "público" (sin estar registrados los usuarios) ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 25/05/2003 a las 12:36
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 20:27.