Heim  >  Artikel  >  Backend-Entwicklung  >  So schreiben Sie ein sicheres Benutzerauthentifizierungssystem mit PHP

So schreiben Sie ein sicheres Benutzerauthentifizierungssystem mit PHP

WBOY
WBOYOriginal
2023-07-06 12:49:251249Durchsuche

So schreiben Sie ein sicheres Benutzerauthentifizierungssystem mit PHP

Einführung:
In modernen Internetanwendungen ist die Benutzerauthentifizierung eine wichtige Komponente. Ein sicheres und zuverlässiges Benutzerauthentifizierungssystem ist für den Schutz von Benutzerdaten und Anwendungssicherheit von entscheidender Bedeutung. Daher ist es sehr wichtig zu lernen, wie man mit PHP ein sicheres Benutzerauthentifizierungssystem schreibt. In diesem Artikel wird die Implementierung eines sicheren Benutzerauthentifizierungssystems in PHP vorgestellt und Codebeispiele bereitgestellt.

1. Vorbereitung
Bevor Sie mit dem Schreiben des Benutzerauthentifizierungssystems beginnen, müssen Sie die folgende Umgebung und Tools vorbereiten:

    Einen Webserver mit installiertem PHP;
  1. Einen Text Editor wie Sublime Text oder Visual Studio Code.
  2. 2. Datenbankdesign
  3. Bevor wir mit dem Schreiben von Code beginnen, müssen wir das Datenbankschema entwerfen. Ein typisches Benutzerauthentifizierungssystem erfordert die folgenden Tabellen:


Benutzertabelle (Benutzer): speichert Benutzerinformationen wie Benutzernamen, Passwörter usw.;

    Rollentabelle (Rollen): speichert Benutzerrolleninformationen;
  1. Berechtigungstabelle (Berechtigungen): Speichert Benutzerberechtigungsinformationen.
  2. Benutzerrollenzuordnungstabelle (users_roles): Speichert die Zuordnung zwischen Benutzern und Rollen.
  3. Rollenberechtigungszuordnungstabelle (roles_permissions): Speichert die Zuordnung zwischen Rollen und Berechtigungen.
  4. Sie können die folgenden SQL-Anweisungen verwenden, um die oben genannten Tabellen zu erstellen:
  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)
    );
3. Benutzerregistrierung

Benutzerregistrierungsfunktionen implementieren, einschließlich der Überprüfung von Benutzernamen und Passwörtern, dem Einfügen von Benutzerinformationen in die Benutzertabelle usw. Das Folgende ist ein Codebeispiel einer einfachen Benutzerregistrierungsseite:

<?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>

Benutzeranmeldung
Implementieren Sie die Benutzeranmeldefunktion, einschließlich der Überprüfung des vom Benutzer eingegebenen Benutzernamens und Passworts Sitzung zur späteren Verwendung. Das Folgende ist ein Codebeispiel für eine einfache Benutzeranmeldeseite:

<?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. Überprüfung der Benutzerberechtigung
Nachdem sich der Benutzer erfolgreich angemeldet hat, muss die Berechtigung des Benutzers überprüft werden, um sicherzustellen, dass der Benutzer nur auf Seiten zugreifen kann, für die er bzw Sie hat die Erlaubnis. Das Folgende ist ein einfaches Beispiel für einen Berechtigungsüberprüfungscode:

<?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;
    }
}
?>

Zusammenfassung:
Durch den obigen Beispielcode verstehen wir, wie man PHP verwendet, um ein grundlegendes sicheres Benutzerauthentifizierungssystem zu schreiben. In praktischen Anwendungen muss auch auf das Filtern und Überprüfen von Benutzereingaben, das Verschlüsseln und Speichern von Benutzerkennwörtern und die Handhabung des Kennwortabrufprozesses geachtet werden, um die Systemsicherheit und das Benutzererlebnis zu verbessern. Gleichzeitig ist das Benutzerauthentifizierungssystem auch ein dynamischer Prozess und muss entsprechend den tatsächlichen Anforderungen kontinuierlich verbessert und perfektioniert werden.

Das obige ist der detaillierte Inhalt vonSo schreiben Sie ein sicheres Benutzerauthentifizierungssystem mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn