Le téléchargement de fichiers est une fonctionnalité très courante dans le développement de sites Web, mais la question qui lui vient est de savoir comment assurer l'intégrité et la sécurité des fichiers téléchargés. Le fichier peut être falsifié pendant le transfert, ou un fichier malveillant a été téléchargé. PHP fournit une fonction pratique md5_file () , qui peut aider les développeurs à calculer rapidement le code de vérification MD5 d'un fichier, vérifiant ainsi si le fichier a été falsifié ou corrompu.
MD5_FILE () est une fonction intégrée PHP qui calcule directement la valeur de hachage MD5 du fichier spécifié et renvoie une chaîne 32 bits. La valeur de hachage MD5 peut être utilisée pour détecter si le contenu du fichier est cohérent. S'il y a des modifications du contenu du fichier, la valeur MD5 correspondante sera différente.
Prototype de fonction:
string md5_file ( string $filename [, bool $raw_output = false ] )
$ nom de fichier : chemin de fichier.
$ raw_output : s'il faut renvoyer le format binaire d'origine, par défaut en false , renvoie une chaîne hexadécimale 32 bits.
Vérifiez l'intégrité des fichiers téléchargés <br> Lorsque l'utilisateur télécharge le fichier, le serveur calcule la valeur MD5 du fichier téléchargé et le compare à la valeur MD5 calculée par le client avant le téléchargement pour s'assurer que le fichier n'a pas été falsifié.
Empêcher les téléchargements en double <br> Utilisez la valeur MD5 pour déterminer si des fichiers avec le même contenu existent déjà dans le serveur pour éviter le stockage redondant.
Tests de sécurité <br> Vous pouvez comparer la valeur MD5 d'un fichier avec la bibliothèque de valeurs MD5 de fichiers malveillants connus pour filtrer les fichiers dangereux.
Vous trouverez ci-dessous un exemple de téléchargement de fichiers simple, en utilisant md5_file () pour vérifier l'intégrité du fichier.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload_file'])) {
$uploadDir = '/var/www/uploads/';
$uploadedFile = $_FILES['upload_file']['tmp_name'];
$originalName = $_FILES['upload_file']['name'];
// Calculez le fichier téléchargé md5 valeur
$md5Hash = md5_file($uploadedFile);
// Ici, vous pouvez l'envoyer au clientmd5valeur比对,Supposons que le client arrivemd5valeur
$clientMd5 = $_POST['client_md5'] ?? '';
if ($clientMd5 && $md5Hash !== $clientMd5) {
echo "La vérification d'intégrité du fichier téléchargé a échoué,Le fichier a peut-être été falsifié。";
exit;
}
// Empêcher les téléchargements répétés(Utilisation simple dans l'exemplemd5Comme nom de fichier)
$destination = $uploadDir . $md5Hash;
if (file_exists($destination)) {
echo "Le fichier existe déjà,Pas besoin de télécharger à plusieurs reprises。";
} else {
if (move_uploaded_file($uploadedFile, $destination)) {
echo "Télécharger le fichier avec succès,MD5valeur为:$md5Hash";
} else {
echo "Le téléchargement de fichiers a échoué。";
}
}
} else {
?>
<form method="post" enctype="multipart/form-data" action="http://m66.net/upload.php">
Veuillez sélectionner un fichier:<input type="file" name="upload_file" required><br>
documentMD5Le code de vérification(Facultatif):<input type="text" name="client_md5"><br>
<button type="submit">Télécharger</button>
</form>
<?php
}
?>
Les utilisateurs frontaux peuvent d'abord utiliser des outils pour calculer le MD5 du fichier et remplir le champ Client_MD5 du formulaire. Le côté serveur comparera le MD5 du fichier téléchargé avec cette valeur.
Le côté serveur utilise la valeur MD5 du fichier comme nom de sauvegarde pour empêcher les téléchargements répétés de fichiers.
La fonction move_uploaded_file () garantit que les fichiers sont déplacés en toute sécurité des répertoires temporaires vers les répertoires cibler.
Restreindre les types de fichiers : vérifiez les extensions de fichiers et les types de mime avant le téléchargement.
Taille limite du fichier : empêchez la pression excessive du serveur de télécharger des fichiers excessifs.
Utilisez HTTPS : assurez-vous que le processus de transfert de fichiers n'est pas attaqué par l'homme au milieu.
Mettre à jour régulièrement la bibliothèque de fichiers malveillants : utilisez le fichier MD5 pour comparer avec les bases de données de virus connues pour filtrer les fichiers dangereux.
Évitez l'accès direct au répertoire de téléchargement : utilisez des chemins de stockage sécurisés et des commandes d'autorisation.