Dans le développement de sites Web, la fonction de téléchargement de fichiers est un module commun et important, mais il entraîne également des risques de sécurité. Un attaquant peut télécharger des fichiers malveillants, mettant en danger la sécurité du serveur. Pour éviter ce type de risque, une méthode couramment utilisée consiste à déterminer si le fichier téléchargé est un fichier malveillant connu par la valeur de hachage du fichier (comme MD5).
Cet article présentera comment utiliser la fonction intégrée PHP MD5_FILE () pour combiner la liste des valeurs MD5 des fichiers malveillants connus pour déterminer si le fichier téléchargé est à risque.
MD5_FILE () est une fonction en PHP qui calcule la valeur de hachage MD5 d'un fichier spécifié. Contrairement à MD5 () , MD5 () hache une chaîne, tandis que md5_file () calcule directement le hachage du contenu du fichier, qui convient à la détection si le fichier est cohérent.
Exemple d'utilisation:
$hash = md5_file('/path/to/file.txt');
echo $hash;
La valeur de retour est la valeur MD5 hexadécimale 32 bits du contenu du fichier.
Maintenez une liste des valeurs de hachage MD5 pour les fichiers malveillants connus, stockés dans une table ou une base de données.
Une fois l'utilisateur télécharge le fichier, enregistrez le fichier dans un répertoire temporaire.
Utilisez md5_file () pour calculer la valeur de hachage du fichier.
Détermine si la valeur de hachage est dans la liste malveillante.
S'il existe, le fichier n'est pas téléchargé ou supprimé; Sinon, le téléchargement est autorisé.
L'exemple suivant démontre un simple téléchargement de fichiers et la détection de fichiers malveillants:
<?php
// Les fichiers malveillants sont connus MD5 Liste(Exemple)
$malicious_md5_list = [
'd41d8cd98f00b204e9800998ecf8427e', // 空文件Exemple
'5d41402abc4b2a76b9719d911017c592', // 其他恶意文件Exemple
];
// Déterminez s'il y a des fichiers téléchargés
if (isset($_FILES['upload_file']) && $_FILES['upload_file']['error'] === UPLOAD_ERR_OK) {
$tmpFilePath = $_FILES['upload_file']['tmp_name'];
// Calculer le fichier MD5 valeur
$fileMd5 = md5_file($tmpFilePath);
// Vérifiez s'il s'agit d'un fichier malveillant
if (in_array($fileMd5, $malicious_md5_list)) {
echo "Le fichier téléchargé est détecté comme un fichier malveillant connu,Le téléchargement a échoué。";
// Vous pouvez choisir de supprimer des fichiers temporaires ou des journaux de journaux
unlink($tmpFilePath);
} else {
// Déplacez le fichier vers le répertoire cible
$destination = __DIR__ . '/uploads/' . basename($_FILES['upload_file']['name']);
if (move_uploaded_file($tmpFilePath, $destination)) {
echo "Télécharger le fichier avec succès。";
} else {
echo "L'échec de l'échec des fichiers a échoué。";
}
}
} else {
echo "Aucun fichier de téléchargement n'a été détecté ou télécharger une erreur。";
}
?>
Mise à jour de la bibliothèque de fichiers malveillante : il est important de maintenir une dernière bibliothèque de hachage de fichiers malveillant et il est recommandé de le mettre à jour régulièrement.
Risque de collision MD5 : MD5 s'est avéré avoir un risque de collision, et dans des cas extrêmes, un attaquant peut construire un fichier avec le même hachage. Envisagez d'utiliser une fonction de hachage plus sûre comme Sha256 (en utilisant hash_file ('sha256', fichier $) ).
Mécanisme de détection multiple : ne comptez pas uniquement sur la détection du hachage, il est préférable de combiner plusieurs mesures telles que la vérification du type de fichier, la restriction d'extension de fichier, la numérisation du contenu (comme le logiciel antivirus).
Sécartition de l'autorisation : des autorisations raisonnables sont nécessaires pour télécharger des répertoires pour empêcher l'exécution directement des fichiers malveillants.
En utilisant la fonction MD5_FILE () de PHP, vous pouvez rapidement déterminer si le contenu du fichier téléchargé correspond aux fichiers malveillants connus, contribuant à améliorer la sécurité des fichiers de téléchargement. La combinaison d'une bibliothèque de hachage de fichiers malveillante complète et de plusieurs mesures de protection peut effectivement empêcher les fichiers malveillants de nuire au serveur.