0 votes

Téléchargement sécurisé de fichiers PHP

J'essaie de développer un module de téléchargement de fichiers sur notre nouveau site qui vous permet de télécharger tout sur nos serveurs. Le fichier téléchargé est téléchargé sur /files dans lequel le fichier .htaccess suivant empêche les utilisateurs d'exécuter un fichier .php :

<Files *.*>
ForceType applicaton/octet-stream
</Files>

Cela déclenche la fenêtre de téléchargement du navigateur (au moins dans FF et Safari), mais peut-on supposer que le fichier ne sera pas exécuté sur le serveur en utilisant cette méthode ? Si non, comment mettriez-vous en œuvre une telle solution ?

3voto

Paolo Bergantino Points 199336

Je pense que la chose la plus sûre est de restreindre l'accès 100% web au répertoire, et d'avoir un script comme download.php par lequel vous passez un identifiant de fichier qui va chercher le fichier approprié et l'affiche dans le navigateur. Cependant, je suis presque sûr que ce que vous avez fonctionne et est sûr.

2voto

bobince Points 270740

Peut-on supposer que le fichier ne sera pas exécuté sur le serveur avec cette méthode ?

En quelque sorte, mais cela dépend des autres directives présentes dans votre configuration ; peut-être y a-t-il d'autres règles configurées pour permettre l'exécution des fichiers PHP. Si la seule façon d'activer PHP est d'utiliser le gestionnaire PHP sur le type de fichier, cela devrait empêcher PHP de s'exécuter.

Cependant, arrêter l'exécution de PHP n'est qu'un de vos soucis. Si des personnes chargent des fichiers contenant du contenu actif, comme du HTML ou du Flash - même si le type de fichier indique qu'il s'agit d'une image innocente - elles peuvent prendre le contrôle des sessions d'autres utilisateurs sur votre site par le biais du cross-site scripting (XSS). Voir http://stackoverflow.com/questions/602539/stop/602904#602904 pour une discussion à ce sujet.

Une interface 'download.php' qui utilise Content-Disposition pour toujours déclencher la boîte de téléchargement, associée au stockage des fichiers sous des noms de fichiers non fournis par l'utilisateur comme '1234.dat', est beaucoup plus sûre.

1voto

David Z Points 49476

Je pense que tu veux vraiment ça :

<Directory /path/to/files>
    SetHandler default-handler
</Directory>

Ce que vous avez pourrait fonctionner dans la pratique, car le serveur est configuré par défaut pour ne rien exécuter à moins qu'on ne lui demande spécifiquement de le faire, mais cela ne garantit pas vraiment que rien ne sera exécuté. ForceType définit juste le type de contenu pour les fichiers statiques (je ne suis pas sûr, mais je doute que cela affecte les scripts exécutables).

1voto

Pour appuyer la réponse de Paolo, déplacez votre répertoire de fichiers hors du chemin accessible. Vous pouvez alors écrire le script de download.php en utilisant la fonction de PEAR qui vous permet d'accéder à vos fichiers. HTTP_Download pour servir les fichiers.

0voto

St. John Johnson Points 4163

Je suis d'accord avec Paolo, son chemin est plus sûr. Il y a toujours le problème de quelqu'un qui exploite vos fichiers PHP pour exécuter un fichier téléchargé. Mauvais exemple :

include_once("/modules/".$_GET["module"].".php");

Où quelqu'un est passé module=../Files/exploit

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X