Table des matières
1. Vérifiez la source de téléchargement et le type de fichier
2. Nom du fichier de contrôle et chemin de stockage
3. Définir les restrictions de sécurité pour le serveur et le PHP
4. Traitement secondaire de fichiers multimédias tels que des images
Maison développement back-end tutoriel php Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?

Jul 08, 2025 am 02:37 AM
php Téléchargement de fichiers

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contrôler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contrôle de liste blanche; 2. Renommez le fichier à une chaîne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?

Le téléchargement de fichiers est une fonctionnalité commune dans de nombreuses applications PHP, mais si elle est gérée accidentellement, elle peut facilement apporter des risques de sécurité. Le problème le plus direct est: les fichiers téléchargés par les utilisateurs peuvent contenir du code malveillant. Par conséquent, le cœur d'assurer la sécurité du téléchargement de fichiers réside dans la vérification, la restriction et l'isolement .

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?

Ce qui suit est basé sur plusieurs scénarios réels et parler de la façon de gérer en toute sécurité les téléchargements de fichiers dans PHP.


1. Vérifiez la source de téléchargement et le type de fichier

Tout d'abord, assurez-vous que la demande de téléchargement est en effet de votre propre formulaire, pas une demande faite par d'autres. Vous pouvez empêcher les attaques CSRF en vérifiant $_SERVER['HTTP_REFERER'] (bien que pas entièrement fiable), ou en utilisant un jeton unique.

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?

Deuxièmement, ne comptez pas seulement sur le client pour juger le type de fichier . Le type MIME est fourni lorsque le navigateur se télécharge, mais cela peut être truqué. Php fournit des fonctions mime_content_type() ou finfo_file() pour lire le type de fichier réel:

 $ finfo = finfo_open (fileInfo_mime_type);
$ mime = finfo_file ($ finfo, $ _files ['file'] ['tmp_name']);

Il est recommandé de contrôler les types autorisés de contrôle blanche, tels que:

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP?
  • Catégorie d'image: image/jpeg , image/png
  • Classe de documents: application/pdf , etc.

La méthode de liste noire est sujette à manquer de nouvelles méthodes d'attaque et n'est pas recommandée.


2. Nom du fichier de contrôle et chemin de stockage

N'utilisez pas directement les noms de fichiers téléchargés par les utilisateurs, car il peut y avoir des caractères spéciaux ou des structures cachées, telles que des fichiers .php qui se dégagent sous forme d'images.

La méthode est très simple:

  • Renommez le fichier à une chaîne aléatoire, telle que md5(uniqid()) . '.jpg'
  • Ne faites pas confiance à l'extension du fichier d'origine, déterminez le suffixe par le type réel de détection

De plus, ne placez pas le répertoire de téléchargement sous le chemin d'accès Web . Par exemple, enregistrez le fichier dans /var/www/uploads/ plutôt dans uploads/ dans le répertoire root du site Web, de sorte que même si le script exécutable est téléchargé, il ne peut pas être directement accessible et exécuté.


3. Définir les restrictions de sécurité pour le serveur et le PHP

PHP est livré avec certains éléments de configuration liés au téléchargement, réglé dans php.ini :

  • upload_max_filesize et post_max_size : Contrôlez la taille maximale de téléchargement
  • file_uploads : s'il faut permettre le téléchargement
  • upload_tmp_dir : répertoire temporaire, de préférence réglé sur un chemin non Web

Le niveau Apache / Nginx peut également être restreint, comme Nginx:

 Emplacement / téléchargement / {
    nier tout;
}

Cela empêche les utilisateurs d'accéder directement au contenu dans le répertoire téléchargé.

Vous pouvez également envisager d'ajouter .htaccess (apache) au répertoire de téléchargement pour interdire l'exécution du script:

 Options -execcgi-indexes
AddHandler cgi-script .php .php3 .pl .py .jsp .asp

4. Traitement secondaire de fichiers multimédias tels que des images

Si votre application accepte les téléchargements d'images, une mesure de sécurité supplémentaire consiste à «traiter» ces images:

  • Ouvrez l'image avec GD ou Imagick et enregistrez-la à nouveau
  • Cela peut éliminer les données malveillantes intégrées dans l'image (comme les scripts transportés par les informations EXIF)

Exemple d'extrait de code:

 $ image = ImageCreateFromJPEG ($ _ fichiers ['file'] ['tmp_name']);
imagejpeg ($ image, 'new_image.jpg');
iMageDestroy ($ image);

Bien que toutes les attaques ne puissent pas être complètement éliminées, elles peuvent efficacement améliorer la sécurité.


Fondamentalement, c'est tout. Le point clé est toujours le même vieux dicton: ne faites jamais confiance à la saisie des utilisateurs . Bien que la fonction de téléchargement soit courante, elle deviendra une entrée de porte dérobée si vous ne faites pas attention. Ce n'est qu'en faisant un bon travail de vérification, en restreignant les autorisations et en isolant l'environnement que vous pouvez vraiment réduire les risques.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment gérer les erreurs mortelles en PHP? Comment gérer les erreurs mortelles en PHP? Sep 04, 2025 am 09:17 AM

FataleRrorsInphPhaltexEcutionAndCannotBecaughtByTry-Catchblocks.2.UseRegister_Shutdown_Function () TODETECTFATALERRORSVIAERROR_GET_LAST () ANDRESPONDAPROPROPROPROPROPROPROPROPROPROPROPROPROPROPROPROPTOR

Comment supprimer les valeurs en double d'un tableau en PHP? Comment supprimer les valeurs en double d'un tableau en PHP? Sep 05, 2025 am 08:28 AM

Utilisez la fonction Array_Unique () pour supprimer les valeurs en double dans le tableau, conserver les éléments d'apparence et convaincre les tableaux d'indexation et associatifs, par exemple: $ fruits = ['pomme', 'banana', 'Apple', 'Orange', 'Banana']; $ UNIQUE_FRUITS = Array_Unique ($ fruits); Le résultat est [«pomme», «banane», «orange»]; Cette fonction conserve le nom de clé d'origine, si vous avez besoin de réindexer, vous pouvez utiliser array_values ​​(); Notez qu'il est basé sur la comparaison des chaînes et que les types mixtes peuvent affecter les résultats. Si vous devez vérifier strictement, il est recommandé de le traiter dans une boucle personnalisée.

Comment empêcher l'injection SQL en PHP? Comment empêcher l'injection SQL en PHP? Sep 05, 2025 am 05:27 AM

UsepreparedstatementsWithpDoOrMysqlitoseParatesqllogicfromdata, empêchant le point de vue

Qu'est-ce qu'un constructeur et un destructeur en PHP? Qu'est-ce qu'un constructeur et un destructeur en PHP? Sep 05, 2025 am 08:48 AM

Le constructeur __Contruct () est automatiquement exécuté lorsque l'objet est créé et utilisé pour l'initialisation, tel que l'attribution ou l'établissement de connexions; 2. Le destructeur __Drestruct () est appelé lorsque l'objet est détruit et est utilisé pour libérer des ressources, tels que la fermeture d'un fichier. Les deux gèrent conjointement le cycle de vie de l'objet PHP.

Comment utiliser les générateurs pour enregistrer la mémoire en PHP? Comment utiliser les générateurs pour enregistrer la mémoire en PHP? Sep 06, 2025 am 04:04 AM

Le générateur enregistre efficacement la mémoire en sortissant des valeurs une par une plutôt que de renvoyer le tableau complet à la fois. Utilisez la fonction de rendement pour retourner l'objet générateur, générer des valeurs selon les besoins et éviter une grande quantité de mémoire consommatrice de données.

Comment mettre en œuvre le mise en œuvre automatique pour les classes en PHP? Comment mettre en œuvre le mise en œuvre automatique pour les classes en PHP? Sep 06, 2025 am 05:19 AM

Utilisez SPL_autoload_register () pour charger automatiquement les fichiers de classe PHP pour éviter l'importation manuelle; Il est recommandé d'utiliser Composer pour implémenter la norme PSR-4, les répertoires MAP via l'espace de noms, tels que App \ Models \ User correspondant à SRC / Models / User.php, exécutez ComposerDump-Autoload pour générer des fichiers de chargement automatiques, puis introduire Vendor / Autoload.php.

Comment vérifier si une variable est nul en PHP? Comment vérifier si une variable est nul en PHP? Sep 05, 2025 am 08:35 AM

Useis_null () ou === TOCHECK FORNULLINPHP.IS_NULL ($ était) returnstrueif $ Varisnull.al Alternatives, $ était === ZerensuresOnlyNullvaluSe esreturnTrue, False EvaluatotherFaltothesyvalues ​​Zone de l'assitmayincorrectyeveatotherfalsyvalues.

Comment utiliser des expressions régulières (regex) pour correspondre à un modèle en PHP? Comment utiliser des expressions régulières (regex) pour correspondre à un modèle en PHP? Sep 04, 2025 am 09:11 AM

Utilisez preg_match () pour une seule correspondance, preg_match_all () pour une correspondance globale, et combinez des modificateurs réguliers et des caractères spéciaux échappés pour réaliser efficacement la correspondance de motifs en php.

See all articles