Maison >développement back-end >tutoriel php >Comment implémenter en toute sécurité la fonctionnalité « Se souvenir de moi » dans les systèmes de connexion PHP à l'aide de cookies persistants ?

Comment implémenter en toute sécurité la fonctionnalité « Se souvenir de moi » dans les systèmes de connexion PHP à l'aide de cookies persistants ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 00:36:02480parcourir

How to Securely Implement

Cookies persistants pour la fonctionnalité sécurisée « Se souvenir de moi » dans les systèmes de connexion PHP

Introduction

La mise en œuvre d'une fonctionnalité « se souvenir de moi » dans un système de connexion PHP nécessite le stockage d'un cookie sécurisé dans le navigateur de l'utilisateur. Ce cookie permet aux utilisateurs de rester connectés même après la fermeture de leur navigateur ou le redémarrage de leur appareil.

Structure de la base de données

Pour stocker les informations de mémorisation de moi en toute sécurité, créez un tableau séparé dans votre 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`)
);

Les champs sélecteur et jeton seront utilisés pour stocker le souvenir de moi informations.

Après la connexion

Lorsqu'un utilisateur se connecte et sélectionne l'option "Se souvenir de moi", générez un sélecteur aléatoire (12 caractères) et un authentificateur (33 bytes) en utilisant la fonction random_bytes() ou une méthode similaire pour garantir le caractère aléatoire.

Définissez le cookie Remember Me en utilisant ce qui suit code :

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);

Insérez le sélecteur, l'authentificateur haché, l'ID utilisateur et le délai d'expiration dans la table auth_tokens.

Ré-authentification au chargement de la page

Lors des chargements de page suivants, si l'utilisateur n'est pas déjà connecté et que le cookie Remember Me est set :

  1. Extraire le sélecteur et l'authentificateur du cookie.
  2. Interrogez la table auth_tokens pour la ligne avec le sélecteur correspondant.
  3. Comparez le hachage calculé du authentificateur extrait avec l'authentificateur haché stocké à l'aide de hash_equals().
  4. Si les hachages correspondent, connectez-vous l'utilisateur en définissant les données de session et en régénérant le jeton de connexion.

Détails

  • Résistance aux collisions : Le 9 -le sélecteur d'octets fournit 72 bits de résistance aux collisions et l'authentificateur de 33 octets en fournit 264. bits.
  • Authentificateur de hachage : Le stockage du hachage SHA256 de l'authentificateur atténue les risques associés aux fuites d'informations.
  • Comparaison à temps constant : Les différents Les champs de sélection et d'authentification éliminent les attaques de synchronisation potentielles sur les recherches dans 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!

Déclaration:
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