La sécurité des systèmes d'authentification des utilisateurs est une considération importante lors de la création de sites Web ou d'applications. PHP fournit une variété de façons d'implémenter le chiffrement et la vérification des mots de passe, parmi lesquels la fonction crypte () est un outil de chiffrement classique et puissant. Cet article expliquera comment utiliser la fonction crypt () pour créer un système d'enregistrement et de connexion utilisateur sécurisé, y compris le cryptage de mot de passe, la vérification et le traitement des données des utilisateurs.
Crypt () est une fonction de chiffrement fournie par PHP qui utilise un algorithme de hachage unidirectionnel pour crypter les chaînes. Il prend en charge une variété d'algorithmes de chiffrement (tels que MD5, SHA-256, SHA-512 et Blowfish), selon le format de sel (sel) fourni.
string crypt ( string $str , string $salt )
La valeur du sel détermine le type et le comportement de l'algorithme de chiffrement. Pour la sécurité, il est recommandé d'utiliser un sel qui prend en charge SHA-512 ou Blowfish.
Lors de l'enregistrement d'un utilisateur, nous devons crypter le mot de passe avant de les déposer dans la base de données pour nous assurer que même si la base de données est divulguée, l'attaquant ne peut pas facilement restaurer le mot de passe.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// Créer un sel fort et crypter le mot de passe(utiliserSHA-512)
$salt = '$6$' . bin2hex(random_bytes(16)) . '$'; // SHA-512
$hashed_password = crypt($password, $salt);
// Enregistrer le nom d'utilisateur et le mot de passe crypté dans la base de données(parSQLitePar exemple)
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$username, $hashed_password]);
echo "Enregistré avec succès,s'il te plaît <a href='https://m66.net/login.php'>Se connecter</a>。";
}
?>
Formulaire d'inscription HTML:
<form method="POST" action="">
nom d'utilisateur:<input type="text" name="username" required><br>
mot de passe:<input type="password" name="password" required><br>
<input type="submit" value="registre">
</form>
Lors de la connexion, nous n'avons pas besoin de connaître le mot de passe d'origine. Cryptez simplement le mot de passe entré par l'utilisateur en utilisant le même sel dans la base de données et comparez-le avec le hachage stocké.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password_input = $_POST['password'];
$db = new PDO('sqlite:users.db');
$stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
$stmt->execute([$username]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$hashed_password = $row['password'];
if (crypt($password_input, $hashed_password) === $hashed_password) {
echo "Se connecter成功!Content de te revoir,{$username}。";
} else {
echo "mot de passe错误。";
}
} else {
echo "L'utilisateur n'existe pas。";
}
}
?>
Formulaire de connexion HTML:
<form method="POST" action="">
nom d'utilisateur:<input type="text" name="username" required><br>
mot de passe:<input type="password" name="password" required><br>
<input type="submit" value="Se connecter">
</form>
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
Utilisation de HTTPS : assurez-vous que tous les transferts de formulaire sont effectués sur une connexion chiffrée.
Ajouter la protection du CSRF : empêchez les attaques de contrefaçon de demande croisée.
Limitez le nombre de tentatives de connexion : Empêchez la fissuration de la force brute.
Mettez à jour la version PHP dans le temps : Gardez les algorithmes de chiffrement et les fonctions en toute sécurité.
Lorsque vous utilisez des fonctions plus modernes (telles que Password_Hash), vous pouvez vous référer à la logique de cet article : Bien que Crypt () soit valide, le PHP moderne recommande d'utiliser Password_Hash () et Password_Verify () .
En utilisant rationnellement la fonction crypte () et la logique de vérification de mot de passe qui l'accompagne, nous pouvons créer un système d'authentification utilisateur relativement sûr. Alors que le PHP moderne fournit des interfaces plus avancées comme Password_Hash () , la compréhension du fonctionnement de Crypt () peut toujours aider à comprendre la nature du cryptage de mot de passe en profondeur. Crypt () est toujours un choix pratique dans certaines versions inférieures des environnements PHP ou des conditions de compatibilité spéciales.