Maison >développement back-end >tutoriel php >Sécurité du téléchargement de fichiers en PHP
Avec le développement d'Internet, la fonction de téléchargement de fichiers est devenue l'une des fonctions standards de presque toutes les applications web. En PHP, la fonction de téléchargement de fichiers est implémentée via la variable superglobale $_FILES. Cependant, la fonction de téléchargement de fichiers est souvent l'endroit le plus vulnérable aux problèmes de sécurité dans les applications Web. Cet article combinera des cas pratiques pour présenter les problèmes auxquels il faut prêter attention en matière de sécurité du téléchargement de fichiers en PHP et proposer des solutions.
1. Principes de base du téléchargement de fichiers
En PHP, le téléchargement de fichiers peut être réalisé en suivant les étapes suivantes :
1 Dans Définir le. enctype dans le formulaire HTML à multipart/form-data et ajoutez un contrôle de téléchargement de fichier3525558f8f338d4ea90ebf22e5cde2bc
2 Utilisez la variable superglobale $_FILES côté serveur pour recevoir. télécharge le fichier
3. Obtenez les informations pertinentes sur le fichier téléchargé via la super variable globale $_FILES, telles que le nom du fichier, le type, la taille, etc.
4. Enregistrez le fichier téléchargé dans le répertoire spécifié
2. Problèmes de sécurité courants lors du téléchargement de fichiers
1 Téléchargement de fichiers malveillants
Le téléchargement de fichiers malveillants signifie que l'attaquant utilise le fichier. La fonction de téléchargement télécharge des fichiers contenant du code malveillant et les attaques sont menées via ces fichiers. L'une des méthodes d'attaque les plus courantes consiste à télécharger des fichiers Webshell. Webshell contient souvent certaines fonctions permettant d'exécuter des commandes. Les attaquants peuvent prendre le contrôle du serveur via WebShell.
2. Téléchargez des fichiers volumineux
Le téléchargement de fichiers volumineux occupera la bande passante et l'espace de stockage du serveur et peut provoquer un crash du serveur. De plus, en téléchargeant des fichiers volumineux, les attaquants peuvent également effectuer des attaques par déni de service (DoS).
3. Écrasement de fichier
Si un attaquant parvient à remplacer le fichier spécifié par un fichier téléchargé par lui-même en téléchargeant un fichier, cela peut entraîner une perte importante de données critiques. le système. Attendez les conséquences. Les attaquants peuvent obtenir l'écrasement de fichiers en téléchargeant illégalement et en exploitant les vulnérabilités de traversée de répertoires.
4. Contournement du type de fichier
Un attaquant peut contourner la vérification du type de fichier du serveur en falsifiant le nom du suffixe ou le type MIME du fichier, téléchargeant ainsi un document illégal. Par exemple, un attaquant peut modifier l'extension d'un fichier HTML en PHP pour mettre en œuvre des attaques XSS.
3. Solutions pour la sécurité du téléchargement de fichiers
1. Filtrage de liste blanche
Autorisé uniquement via le filtrage de liste blanche côté serveur Téléchargez des types de fichiers spécifiques et directement refuser de télécharger des fichiers qui ne répondent pas aux exigences. Cette méthode peut empêcher efficacement les attaques de contournement de type de fichier. L'exemple de code est le suivant :
$allowedExt = array('jpg', 'jpeg', 'png', 'gif');
//Obtenir le nom de fichier et l'extension de le fichier#🎜🎜 #$filename = $_FILES'file';
$fileext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
//Déterminer si le type de fichier est autorisé
if(!in_array($ fileext, $allowedExt)){
//文件类型不被允许 die("File type not allowed.");}2. Cryptage du nom de fichierCryptez le nom du fichier téléchargé sur côté serveur. Cela peut empêcher efficacement que le nom du fichier soit deviné par des attaquants ou qu'il soit intentionnellement falsifié. Par exemple, vous pouvez utiliser l'algorithme de chiffrement md5 pour chiffrer les noms de fichiers. L'exemple de code est le suivant : $filename = $_FILES'file';
$filehash = md5($filename.time()).'.'.$fileext;#🎜 🎜## 🎜🎜#3. Paramètres d'autorisation des fichiers
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!