Au cours du processus de développement, il est très important d'assurer l'intégrité et la sécurité des fichiers de configuration, en particulier en ce qui concerne les informations sensibles telles que les mots de passe de base de données, les clés d'API, etc. PHP fournit une fonction intégrée Crypt () , qui est principalement utilisée pour le cryptage des mots de passe, mais il peut également être utilisé pour nous aider à vérifier l'intégrité du contenu des fichiers. Cet article présentera en détail comment utiliser la fonction Crypt () de PHP pour implémenter cette fonction et combiner des exemples de code réels pour démontrer des opérations spécifiques.
Crypt () est une fonction utilisée dans PHP pour crypter les chaînes et est souvent utilisée pour le hachage du mot de passe. Il prend en charge une variété d'algorithmes de chiffrement (tels que DES, Blowfish, SHA-256, SHA-512, etc.) et vous permet d'augmenter la sécurité en spécifiant les valeurs de sel. Bien qu'il ne soit pas spécifiquement conçu pour la vérification de l'intégrité des fichiers, avec ses mécanismes d'irréversibilité et de valeur de sel, nous pouvons l'utiliser pour générer des valeurs de hachage des fichiers de configuration et les comparer lors de la vérification ultérieure.
Irrrévabilité : le hachage généré par Crypt () est irréversible, garantissant la sécurité du contenu du fichier.
Mécanisme de valeur de sel : augmente le caractère unique et la force de sécurité du hachage pour éviter les problèmes de collision avec un simple hachage.
Prise en charge intégrée : PHP est intégré, aucune extension supplémentaire requise et est facile à déployer.
Lisez le contenu du fichier de configuration.
Génère une valeur de hachage du contenu (en utilisant crypt () et enregistre la valeur de sel).
Enregistrez les valeurs de hachage à un emplacement sécurisé (base de données ou fichier séparé).
Lorsque vous vérifiez plus tard, relisez le contenu du fichier de configuration, générez une valeur de hachage et comparez-le avec la valeur de hachage enregistrée.
Si la valeur de hachage est cohérente, cela signifie que le fichier de configuration n'a pas été falsifié; Sinon, cela indique que le fichier peut être modifié.
<?php
// Chemin de fichier de configuration
$configFile = 'config.ini';
// Lisez le contenu du fichier de configuration
$configContent = file_get_contents($configFile);
if ($configContent === false) {
die("Impossible de lire le fichier de configuration。");
}
// Générer une valeur de sel(Par exemple Blowfish algorithme,La longueur du sel est22)
$salt = '$2y$12$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
// Générer une valeur de hachage
$hash = crypt($configContent, $salt);
// Enregistrer la valeur de hachage à un fichier sécurisé
file_put_contents('config_hash.txt', $hash);
echo "Le hachage du fichier de configuration a été généré et enregistré。\n";
// -------------- Phase de vérification --------------
// 重新Lisez le contenu du fichier de configuration
$newContent = file_get_contents($configFile);
if ($newContent === false) {
die("Impossible de lire le fichier de configuration。");
}
// Lire le hachage enregistré
$savedHash = file_get_contents('config_hash.txt');
if ($savedHash === false) {
die("无法Lire le hachage enregistré值。");
}
// Crypter un nouveau contenu en utilisant le hachage enregistré comme valeur de sel
$newHash = crypt($newContent, $savedHash);
// Comparez les valeurs de hachage deux fois
if (hash_equals($savedHash, $newHash)) {
echo "Vérification de l'intégrité du fichier de configuration passé,Pas falsifié。\n";
} else {
echo "La vérification de l'intégrité du fichier de configuration a échoué,Le contenu du fichier peut avoir été modifié!\n";
}
?>
Cela tire parti des caractéristiques de la fonction crypt () : si le deuxième paramètre est un hachage existant, crypt () utilisera la même valeur de sel pour générer un nouveau hachage.
hash_equals () est utilisé pour empêcher les attaques de synchronisation et comparer en toute sécurité les chaînes de hachage.
Vous pouvez enregistrer la valeur de hachage dans une base de données ou un autre support de stockage sécurisé pour éviter d'être facilement modifié.
crypt () prend en charge plusieurs algorithmes. L'exemple ci-dessus utilise l'algorithme Blowfish ( 2 ans $ ). Vous pouvez également choisir d'autres algorithmes selon les besoins, mais le format de valeur de sel doit correspondre.
Combiné avec les paramètres d'autorisation du fichier de configuration, améliorez la sécurité.
Vérifiez régulièrement les fichiers de configuration, en particulier après le déploiement automatisé.
Combiné avec le système de journal, enregistrez les résultats de chaque vérification.