Dans les systèmes de gestion de contenu (CMS), la sécurité des données utilisateur est cruciale, en particulier le stockage des mots de passe. La fonction crypt () fournie avec PHP est une méthode de chiffrement classique et sécurisée de mot de passe. L'utiliser est raisonnablement peut améliorer considérablement la sécurité du système. Cet article expliquera en profondeur comment intégrer efficacement la fonction crypt () dans le système CMS pour assurer la sécurité et la flexibilité du stockage de mot de passe.
Crypt () est une fonction de chiffrement intégrée en PHP et est implémentée sur la base d'une variété d'algorithmes de chiffrement (tels que DES, Blowfish, SHA-256, SHA-512, etc.). Il génère une chaîne cryptée irréversible en transmettant un paramètre "Valeur de sel", adapté au stockage de hachage de mot de passe.
$hashed_password = crypt($password, $salt);
La valeur de sel est la clé pour assurer la sécurité du chiffrement et empêcher les attaques de table arc-en-ciel.
crypt () prend en charge différents algorithmes, sous la forme comme suit:
DES (non recommandé, faible sécurité)
Blowfish (identifiant 2 $ $ , recommandé pour le hachage de mot de passe moderne)
SHA-256 (identifiant 5 $ )
SHA-512 (identifiant 6 $ )
Par exemple, utilisez Blowfish:
$salt = '$2y$12$' . substr(bin2hex(random_bytes(16)), 0, 22);
$hash = crypt($password, $salt);
Ici, 2 $ $ représente l'algorithme, 12 est le paramètre de coût (nombre d'itérations, plus la valeur est grande, plus elle prend du temps), suivie de 22 caractères de sel.
function createPasswordHash($password) {
// Générer des sels aléatoires,utiliser Blowfish algorithme
$salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
// Générer du hachage
return crypt($password, $salt);
}
Lorsque l'utilisateur s'inscrit, le mot de passe en texte brut est généré via les fonctions ci-dessus et stocké dans la base de données.
function verifyPassword($password, $hashedPassword) {
// utiliser stored hash Comparaison du sel dans la cryptographie
return crypt($password, $hashedPassword) === $hashedPassword;
}
Lorsque vous vous connectez, retirez le mot de passe de hachage stocké dans la base de données, utilisez son sel pour crypter à nouveau le mot de passe d'entrée et comparer et déterminer s'il correspond.
Les champs de mot de passe sont recommandés pour être de type de chaîne, avec une longueur d'au moins 60 caractères pour accueillir le hachage généré par Blowfish:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash CHAR(60) NOT NULL,
...
);
Ne personnalisez pas le sel : utilisez le format de sel généré par Crypt () , ou utilisez la fonction Password_Hash () (PHP 5.5+) pour simplifier les opérations.
Mise à jour du mot de passe : considérez les utilisateurs qui utilisent des algorithmes plus faibles pour les anciens mots de passe, régénérez des hachages cryptés plus forts lors de la connexion.
Force du mot de passe : combinant la complexité de mot de passe forcée frontale et back-end pour éviter les mots de passe faibles.
Évitez le stockage en texte clair : ne stockez jamais de mots de passe en texte en clair ou de mots de passe chiffrés réversibles.
À partir de PHP 5.5, Password_Hash () et Password_verify () fournissent des interfaces de gestion de mot de passe plus simples et plus sûres, et la couche sous-jacente est également basée sur Crypt () . Il est recommandé d'utiliser de nouveaux projets en premier:
$hash = password_hash($password, PASSWORD_BCRYPT);
$isValid = password_verify($password, $hash);
Si votre version CMS est plus ancienne et que vous devez utiliser Crypt () manuellement, la méthode ci-dessus est toujours une solution sûre.