"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter en toute sécurité un système de connexion de page réservée aux membres en PHP ?

Comment implémenter en toute sécurité un système de connexion de page réservée aux membres en PHP ?

Publié le 2024-11-17
Parcourir:564

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

PHP : pages réservées aux membres sécurisées avec un système de connexion

Défis liés au code fourni

Le code PHP fourni rencontre plusieurs problèmes qui entravent son fonctionnalité :

  1. Récupération des résultats de la requête : au lieu d'utiliser $data1 = $conn->query($sql1);, l'approche correcte consiste à utiliser $data = mysqli_fetch_array($conn->query($sql1)); ou $data = $conn->query($sql1)->fetch_array(); pour récupérer les résultats de la requête.
  2. Connexion et exécution à la base de données : La connexion à la base de données doit être établie en utilisant $total = $data = 0 ; avant d'exécuter une requête.
  3. Syntaxe MySQL : La requête d'insertion du jeton doit utiliser des backticks () autour des noms de table et de colonne (INSERT INTO tokens (tk, gauth) VALUES (?,? )`) au lieu de guillemets simples.
  4. Authentification de l'utilisateur : la logique d'authentification doit plutôt renvoyer le résultat de la requête. de s'appuyer sur des valeurs booléennes ($result = $conn->query($sql3)->fetch_array();).
  5. Token Generation : la méthode de génération de jeton existante n'est pas sécurisée car il utilise openssl_random_pseudo_bytes(). Au lieu de cela, le code doit utiliser un générateur de nombres aléatoires cryptographiquement sécurisé (CSPRNG) comme random_bytes().

Solution proposée

  1. Simplifier les opérations de base de données : Utilisez une seule requête pour récupérer les informations utilisateur et vérifier les informations d'identification.
  2. Utiliser les instructions préparées : lier les paramètres pour empêcher l'injection SQL. vulnérabilités.
  3. Générer des jetons en toute sécurité : utilisez random_bytes() ou une fonction similaire pour la génération sécurisée de jetons.
  4. Stocker les données d'authentification dans la session : Enregistrer le jeton d'authentification dans une variable de session au lieu d'un cookie.
  5. Valider les jetons : effectuer une requête de base de données sur la table des jetons pour valider le jeton fourni.

Code amélioré

Le code révisé suivant résout les problèmes identifiés et fournit un système de connexion à la page réservée aux membres plus sécurisé :

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();
?>
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3