Maison > développement back-end > tutoriel php > Comment puis-je implémenter une fonctionnalité sécurisée « Se souvenir de moi » à l'aide de PHP et des cookies ?

Comment puis-je implémenter une fonctionnalité sécurisée « Se souvenir de moi » à l'aide de PHP et des cookies ?

Susan Sarandon
Libérer: 2024-11-11 00:26:02
original
653 Les gens l'ont consulté

How can I implement a secure

Système de connexion PHP : Remember Me (cookie persistant)

Introduction

La mise en œuvre d'une fonctionnalité "Se souvenir de moi" permet aux utilisateurs rester connecté même après avoir fermé son navigateur. Cette fonctionnalité améliore le confort de l'utilisateur et améliore l'expérience utilisateur globale. Dans cet article, nous examinerons un moyen sécurisé de stocker et de vérifier les cookies dans le navigateur d'un utilisateur pour un mécanisme de connexion persistant.

Stockage des cookies en toute sécurité

Pour sécuriser stockons un cookie, nous utilisons une table séparée dans la base de données :

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);
Copier après la connexion

Processus après la journalisation Dans

Une fois la connexion réussie avec l'option "Se souvenir de moi" activée :

  • Générez un sélecteur de 12 caractères (par exemple, en utilisant base64_encode(random_bytes(9))).
  • Générer un authentificateur de 33 octets (par exemple, en utilisant random_bytes(33)).
  • Définissez un cookie avec les valeurs suivantes :

    'remember': $selector.':'.base64_encode($authenticator)
    Copier après la connexion
  • Stockez le sélecteur, l'authentificateur haché, l'ID utilisateur et la date d'expiration dans le Table de base de données auth_tokens.

Ré-authentification sur la page Charger

Pour réauthentifier l'utilisateur :

if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) {
    list($selector, $authenticator) = explode(':', $_COOKIE['remember']);

    $row = $database->selectRow(
        "SELECT * FROM auth_tokens WHERE selector = ?",
        [
            $selector
        ]
    );

    if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) {
        $_SESSION['userid'] = $row['userid'];
        // Regenerate login token and update database
    }
}
Copier après la connexion

Détails de l'approche

  • Résistance aux collisions : L'utilisation de 9 octets pour le sélecteur fournit 72 bits d'espace de clé, garantissant une collision suffisante résistance.
  • Protection contre l'usurpation d'identité : Le stockage d'un authentifiant haché dans la base de données atténue les risques d'usurpation d'identité.
  • Contre-mesures contre les attaques par timing : Hachage de la valeur de l'authentificateur avant comparaison et séparer le sélecteur de l'authentificateur évite les fuites de synchronisation.
  • Base de données Sécurité : La table auth_tokens permet de supprimer et d'expirer facilement les jetons expirés, tout en préservant l'intégrité de la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal