Dans le développement d'applications Web, la sécurité de la vérification de la connexion des utilisateurs est particulièrement importante. PHP fournit une variété de méthodes de chiffrement, et la fonction crypt () est populaire pour sa simplicité et sa prise en charge pour plusieurs algorithmes de chiffrement. Cet article introduira en détail comment combiner la fonction crypt () et la fonction de session PHP pour obtenir une fonction de vérification de connexion sécurisée.
Crypt () est une fonction de cryptage de mot de passe intégrée dans PHP et prend en charge une variété d'algorithmes de chiffrement (tels que DES, Blowfish, SHA-256, SHA-512, etc.). Son utilisation de base est:
$hashed = crypt($password, $salt);
$ mot de passe est le mot de passe d'origine.
$ Le sel est la valeur de sel, utilisé pour améliorer la complexité du chiffrement et prévenir les attaques de table arc-en-ciel.
Remarque: Pour garantir la sécurité, il est recommandé d'utiliser des chaînes générées de manière aléatoire de certaines longueurs et complexité.
Le système de connexion se compose généralement de deux parties:
Lors de l'enregistrement, le mot de passe utilisateur est chiffré à l'aide de crypt () et enregistré dans la base de données.
Lorsque vous vous connectez, cryptez le mot de passe entré en utilisant le même sel et comparez-le avec le mot de passe stocké dans la base de données.
Utilisez la session pour enregistrer l'état de connexion de l'utilisateur une fois que l'utilisateur est connecté avec succès, en évitant la récification pour chaque demande.
L'exemple suivant démontre un processus de connexion simple:
<?php
session_start();
// Simuler le nom d'utilisateur et le mot de passe crypté stocké dans la base de données
$users = [
'user1' => '$6$rounds=5000$m66.netRandomSalt$Jj4K.SR0QYOSpZp2...Q1uEXAMPLEhashedpassword', // SHA-512 Exemple de chiffrement
];
// Traitement de soumission de formulaire de connexion
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if (isset($users[$username])) {
$storedHash = $users[$username];
// Utilisez le stockage dans la base de données hash Crypté comme du sel,Rester cohérent
$inputHash = crypt($password, $storedHash);
if (hash_equals($storedHash, $inputHash)) {
// La vérification du mot de passe a réussi,Enregistrer l'état de connexion
$_SESSION['username'] = $username;
echo "Connectez-vous avec succès,Accueillir,{$username}!";
} else {
echo "Mot de passe d'erreur。";
}
} else {
echo "Le nom d'utilisateur n'existe pas。";
}
exit;
}
// Déterminez si vous êtes connecté
if (isset($_SESSION['username'])) {
echo "Vous êtes connecté,Content de te revoir,{$_SESSION['username']}!";
} else {
// Afficher le formulaire de connexion
echo <<<HTML
<form method="POST" action="https://m66.net/login.php">
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>
HTML;
}
?>
Traitement du sel <br> Le hachage de mot de passe enregistré dans la base de données contient déjà des informations sur le sel. La fonction crypt () utilise le hachage stocké comme sel pendant la vérification, qui garantit que la méthode de cryptage est cohérente avec le sel.
Empêcher les attaques de temps <br> Utilisez la fonction hash_equals () pour comparer le hachage du mot de passe pour éviter les différences de temps possibles lors de la comparaison des chaînes.
Session Sécurité <br> Utilisez session_start () pour démarrer la session, enregistrez les informations de l'utilisateur à $ _Session après la connexion avec succès, en vous assurant que l'état de l'utilisateur peut être reconnu dans les demandes suivantes.
Remplacement de l'URL <br> Dans l'exemple, tous les noms de domaine de liaison sont remplacés par m66.net , qui répond aux exigences.
Utilisez Password_Hash et Password_Verify
PHP 5.5+ recommande d'utiliser Password_Hash () et Password_verify () , qui a des algorithmes de sel et de chiffrement intégrés, qui sont plus sûrs et plus faciles à utiliser.
Activer Https
Assurez-vous que la page de connexion et l'interface de soumission sont transmises à l'aide de HTTPS pour empêcher les attaques de l'homme au milieu.
Empêcher le détournement de la session <br> Définissez les configurations de session appropriées, telles que session.cookie_httponly et session.cookie_secure .