Maison  >  Article  >  base de données  >  Comment concevoir une structure de table MySQL sécurisée pour implémenter la fonction de réinitialisation de mot de passe ?

Comment concevoir une structure de table MySQL sécurisée pour implémenter la fonction de réinitialisation de mot de passe ?

王林
王林original
2023-10-31 11:53:01928parcourir

Comment concevoir une structure de table MySQL sécurisée pour implémenter la fonction de réinitialisation de mot de passe ?

Comment concevoir une structure de table MySQL sécurisée pour implémenter la fonction de réinitialisation de mot de passe ?

Dans le développement de logiciels modernes, la fonction de réinitialisation des mots de passe des comptes d'utilisateurs est devenue de plus en plus importante, car le risque de fuite de mot de passe des comptes d'utilisateurs augmente également. Afin de protéger la confidentialité des utilisateurs et la sécurité des données, les développeurs doivent concevoir une structure de table MySQL sûre et fiable pour implémenter la fonction de réinitialisation du mot de passe.

Ce qui suit est une conception réalisable de structure de table MySQL qui peut aider à implémenter la fonction de réinitialisation de mot de passe :

Nom de la table : password_reset

Nom de la colonne Type Description
id INT ( 11) Clé primaire, incrémentation automatique
user_id INT(11) Clé étrangère associée à la table utilisateur
token VARCHAR(255) Identifiant unique pour réinitialiser le mot de passe, à utiliser de manière aléatoire chaîne générée
expiration_time TIMESTAMP Période d'expiration du lien de réinitialisation du mot de passe
creation_time TIMESTAMP Heure de création de l'enregistrement

Les étapes pour mettre en œuvre la fonction de réinitialisation du mot de passe sont les suivants :

  1. Créez la structure de tableau ci-dessus.
CREATE TABLE password_reset (
  id INT(11) NOT NULL AUTO_INCREMENT,
  user_id INT(11) NOT NULL,
  token VARCHAR(255) NOT NULL,
  expiration_time TIMESTAMP NOT NULL,
  creation_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  FOREIGN KEY (user_id) REFERENCES users(id)
);
  1. Lorsque l'utilisateur demande une réinitialisation du mot de passe, générez un jeton unique et insérez les informations pertinentes dans la table password_reset.
function generateToken() {
    $length = 32;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $token = '';
    
    for ($i = 0; $i < $length; $i++) {
        $token .= $characters[rand(0, strlen($characters) - 1)];
    }
    
    return $token;
}

$userId = 123; // 用户的ID
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 day')); // 链接的有效期为一天
$token = generateToken();

$query = "INSERT INTO password_reset (user_id, token, expiration_time) VALUES ($userId, '$token', '$expirationTime')";

// 执行SQL插入操作
  1. Envoyez le token généré à l'utilisateur, et l'utilisateur réinitialise son mot de passe en cliquant sur le lien contenant le token.
  2. Lorsque l'utilisateur clique sur le lien, vérifiez si le jeton dans le lien existe et est valide dans la table password_reset.
$token = $_GET['token']; // 从URL参数中获取token

$query = "SELECT * FROM password_reset WHERE token = '$token' AND expiration_time >= NOW()";
// 执行SQL查询操作
  1. Si le jeton est valide, le formulaire de réinitialisation du mot de passe est affiché à l'utilisateur, et l'utilisateur saisit le nouveau mot de passe et soumet le formulaire.
  2. Mettez à jour le mot de passe de l'utilisateur dans le tableau des utilisateurs après l'envoi du formulaire de réinitialisation du mot de passe.
$newPassword = $_POST['new_password']; // 从表单中获取新密码
$hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); // 新密码进行哈希处理

$query = "UPDATE users SET password = '$hashedPassword' WHERE id = $userId";
// 执行SQL更新操作
  1. À ce moment, supprimez les données pertinentes de l'utilisateur dans la table password_reset.
$query = "DELETE FROM password_reset WHERE user_id = $userId";
// 执行SQL删除操作

Grâce aux étapes ci-dessus de conception de structure de table MySQL et d'exemples de code, une fonction sécurisée de réinitialisation de mot de passe peut être implémentée, qui assure la protection de la sécurité des mots de passe des comptes d'utilisateurs. Bien entendu, la sécurité est un processus continu et les développeurs doivent également prendre en compte d'autres mesures de sécurité, telles qu'une validation appropriée des entrées, l'utilisation de HTTPS, etc.

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