"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar de forma segura un sistema de inicio de sesión de página solo para miembros en PHP?

¿Cómo implementar de forma segura un sistema de inicio de sesión de página solo para miembros en PHP?

Publicado el 2024-11-17
Navegar:571

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: páginas seguras solo para miembros con un sistema de inicio de sesión

Desafíos con el código proporcionado

El código PHP proporcionado encuentra varios problemas que dificultan su funcionalidad:

  1. Recuperación de resultados de consulta: en lugar de usar $data1 = $conn->query($sql1);, el enfoque correcto es usar $data = mysqli_fetch_array($conn->query($sql1)); o $datos = $conn->query($sql1)->fetch_array(); para obtener los resultados de la consulta.
  2. Conexión y ejecución de la base de datos: La conexión a la base de datos debe establecerse usando $total = $data = 0; antes de ejecutar cualquier consulta.
  3. Sintaxis MySQLi: La consulta para insertar el token debe usar comillas invertidas () alrededor de los nombres de tablas y columnas (INSERT INTO tokens (tk, gauth) VALUES (?,? )`) en lugar de comillas simples.
  4. Autenticación de usuario: la lógica de autenticación debe devolver el resultado de la consulta en lugar de depender de valores booleanos ($result = $conn->query($sql3)->fetch_array();).
  5. Generación de tokens: El método de generación de tokens existente no es seguro ya que usa openssl_random_pseudo_bytes(). En su lugar, el código debe utilizar un generador de números aleatorios criptográficamente seguro (CSPRNG) como random_bytes().

Solución propuesta

  1. Simplificar las operaciones de la base de datos: Utilice una única consulta para recuperar información del usuario y comprobar las credenciales.
  2. Utilice declaraciones preparadas: vincule parámetros para evitar la inyección de SQL vulnerabilidades.
  3. Generar tokens de forma segura: emplear random_bytes() o una función similar para la generación segura de tokens.
  4. Almacenar datos de autenticación en la sesión: Guardar el token de autenticación en una variable de sesión en lugar de una cookie.
  5. Validar tokens: realiza una consulta de base de datos en la tabla de tokens para validar el token proporcionado.

Código mejorado

El siguiente código revisado aborda los problemas identificados y proporciona un sistema de inicio de sesión de página más seguro solo para miembros:

connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Prepare statement for user authentication
    $sql_auth = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
    $sql_auth->execute();
    $result_auth = $sql_auth->get_result();

    // Authenticate user
    if ($result_auth->num_rows > 0) {
        $user = $result_auth->fetch_assoc();
        $correct = TRUE;
    } else {
        $correct = FALSE;
    }

    // Generate token
    if ($correct === TRUE) {
        $hex = bin2hex(random_bytes(3));
        $_SESSION['auth'] = $hex;
        $_SESSION['logstat'] = TRUE;
    }

    // Close connection
    $conn->close();
?>
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3