Maison  >  Article  >  développement back-end  >  Comment écrire un système d'authentification utilisateur sécurisé en utilisant PHP

Comment écrire un système d'authentification utilisateur sécurisé en utilisant PHP

WBOY
WBOYoriginal
2023-07-06 12:49:251204parcourir

Comment écrire un système d'authentification utilisateur sécurisé à l'aide de PHP

Introduction :
Dans les applications Internet modernes, l'authentification des utilisateurs est un élément essentiel. Un système d’authentification utilisateur sécurisé et fiable est essentiel à la protection des données utilisateur et à la sécurité des applications. Par conséquent, il est très important d’apprendre à écrire un système d’authentification utilisateur sécurisé à l’aide de PHP. Cet article présentera comment implémenter un système d'authentification utilisateur sécurisé en PHP et fournira des exemples de code.

1. Préparation
Avant de commencer à écrire le système d'authentification des utilisateurs, vous devez préparer l'environnement et les outils suivants :

  1. Un serveur Web avec PHP installé
  2. Un système de gestion de base de données, tel que MySQL ; Éditeur tel que Sublime Text ou Visual Studio Code.
  3. 2. Conception de la base de données
Avant de commencer à écrire du code, nous devons concevoir le schéma de la base de données. Un système d'authentification utilisateur typique nécessite les tables suivantes :


Table des utilisateurs (utilisateurs) : stocke les informations sur les utilisateurs, telles que les noms d'utilisateur, les mots de passe, etc. ;
  1. table des rôles (rôles) : stocke les informations sur les rôles des utilisateurs ; autorisations) : stocke les informations sur les autorisations des utilisateurs ;
  2. Table d'association des rôles utilisateur (users_roles) : stocke l'association entre les utilisateurs et les rôles ;
  3. Table d'association des autorisations de rôle (roles_permissions) : stocke l'association entre les rôles et les autorisations.
  4. Vous pouvez utiliser les instructions SQL suivantes pour créer les tables ci-dessus :
  5. CREATE TABLE users (
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(255) NOT NULL UNIQUE,
        password VARCHAR(255) NOT NULL
    );
    
    CREATE TABLE roles (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(255) NOT NULL UNIQUE
    );
    
    CREATE TABLE permissions (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(255) NOT NULL UNIQUE
    );
    
    CREATE TABLE users_roles (
        user_id INT NOT NULL,
        role_id INT NOT NULL,
        PRIMARY KEY (user_id, role_id),
        FOREIGN KEY (user_id) REFERENCES users (id),
        FOREIGN KEY (role_id) REFERENCES roles (id)
    );
    
    CREATE TABLE roles_permissions (
        role_id INT NOT NULL,
        permission_id INT NOT NULL,
        PRIMARY KEY (role_id, permission_id),
        FOREIGN KEY (role_id) REFERENCES roles (id),
        FOREIGN KEY (permission_id) REFERENCES permissions (id)
    );
  6. 3. Enregistrement des utilisateurs
Implémenter des fonctions d'enregistrement des utilisateurs, notamment la vérification des noms d'utilisateur et des mots de passe, l'insertion des informations utilisateur dans la table utilisateur, etc. Voici un exemple de code pour une page d'enregistrement d'utilisateur simple :

<?php
session_start();
$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 验证用户名和密码
    if (empty($username) || empty($password)) {
        $error = '请输入用户名和密码';
    } else {
        // 将用户信息插入到用户表中
        // ...
    }
}
?>

<!DOCTYPE html>
<html>
<body>

<h2>用户注册</h2>

<form method="POST" action="">
  用户名:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  <input type="submit" value="注册">
</form>

<p><?php echo $error; ?></p>

</body>
</html>

IV. Connexion de l'utilisateur

Implémentez la fonction de connexion de l'utilisateur, y compris la vérification du nom d'utilisateur et du mot de passe saisis par l'utilisateur. Après une vérification réussie, les informations de l'utilisateur sont stockées dans le fichier. session pour une utilisation ultérieure. Ce qui suit est un exemple de code d'une page de connexion utilisateur simple :

<?php
session_start();
$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 根据用户名查询用户信息
    // ...

    // 验证用户名和密码
    if ($user && password_verify($password, $user['password'])) {
        // 将用户信息存储在会话中
        $_SESSION['user'] = $user;
        // 跳转到用户首页
        header('Location: user_home.php');
        exit;
    } else {
        $error = '用户名或密码不正确';
    }
}
?>

<!DOCTYPE html>
<html>
<body>

<h2>用户登录</h2>

<form method="POST" action="">
  用户名:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  <input type="submit" value="登录">
</form>

<p><?php echo $error; ?></p>

</body>
</html>

5. Vérification de l'autorisation de l'utilisateur

Une fois que l'utilisateur s'est connecté avec succès, son autorisation doit être vérifiée pour garantir qu'il ne peut accéder qu'aux pages pour lesquelles il ou elle a la permission. Voici un exemple simple de code de vérification des autorisations :

<?php
session_start();

// 检查用户是否登录
if (!isset($_SESSION['user'])) {
    // 跳转到登录页面
    header('Location: login.php');
    exit;
}

// 检查用户是否具备权限
function checkPermission($permission) {
    $user = $_SESSION['user'];
    // 根据用户角色查询用户具备的权限
    // ...

    // 验证用户是否具备权限
    if (in_array($permission, $user['permissions'])) {
        return true;
    } else {
        return false;
    }
}
?>

Résumé :

Grâce à l'exemple de code ci-dessus, nous comprenons comment utiliser PHP pour écrire un système d'authentification utilisateur sécurisé de base. Dans les applications pratiques, il faut également prêter attention au filtrage et à la vérification des entrées des utilisateurs, au cryptage et au stockage des mots de passe des utilisateurs, ainsi qu'à la gestion du processus de récupération des mots de passe pour améliorer la sécurité du système et l'expérience utilisateur. Dans le même temps, le système d’authentification des utilisateurs est également un processus dynamique et doit être continuellement amélioré et perfectionné en fonction des besoins réels.

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