Maison >développement back-end >tutoriel php >Sécurité du téléchargement de fichiers en PHP

Sécurité du téléchargement de fichiers en PHP

王林
王林original
2023-05-23 08:24:051135parcourir

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 fichier

Cryptez 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

Restreindre l'accès des utilisateurs aux fichiers en définissant les autorisations des fichiers côté serveur. Par exemple, vous pouvez définir les autorisations du fichier téléchargé sur 644, autorisant uniquement le serveur et l'utilisateur à accéder au fichier et en refusant l'accès au fichier aux autres utilisateurs.

4. Chemin de téléchargement du fichier

Lors de la définition du chemin de téléchargement du fichier côté serveur, le fichier téléchargé doit être enregistré dans un répertoire séparé pour éviter d'enregistrer le fichier téléchargé directement dans répertoire d’applications, réduisant ainsi le risque de failles de sécurité.

5. Résumé

Le téléchargement de fichiers est une fonction courante dans les applications Web, mais c'est aussi une partie qui peut facilement causer des problèmes de sécurité. Afin de garantir la sécurité des fichiers téléchargés, nous devons prendre une série de mesures préventives, telles que le filtrage des types de fichiers, le cryptage des noms de fichiers, les paramètres d'autorisation des fichiers, les paramètres du chemin de téléchargement des fichiers, etc., pour garantir que le système est protégé contre la menace de téléchargements de fichiers malveillants.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn