UPLOAD FILE

Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
- - Dernière réponse : fetjalal
Messages postés
2
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
23 août 2008
- 23 août 2008 à 22:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46452-upload-file

Afficher la suite 
sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
30 -
Source déplacée : ceci est une "source" asp.net
jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
16 -
Il s'agit d'une source ASP.net 1.x, avec ASP.net 2.0 il faut mieux utiliser le contrôle <asp:fileupload qui permet de simplifier la plupart des choses.

Ton code dispose d'une ENORME faille de sécurité. Qu'est-ce qui se passe si j'upload la page "CrashServer.aspx" et que je vais à l'adresse /others/CrashServer.aspx ?
Voici quelques règles de base au sujet de l'upload :
- ne jamais faire confiance à l'utilisateur !
- ne jamais stocker les fichiers avec le nom et extensions proposé par l'utilisateur
- si possible :
- ne pas autoriser tous les types de fichier, valider les données avant de les sauvegarder
- ne pas sauvegarder les données dans un repertoire ayant des droits d'execution.
- le top est de stocker les fichiers dans un dossier non accessible via IIS, puis renvoyer le contenu du fichier via un handler dédié.


Au niveau du code, je te conseille d'utiliser un Path.Combine plutot que de la combinaison de string.
Au lieu de faire de faire un extension.toLower() pour comparer les extensions, tu peux utiliser un String.Compare("EXE", "eXe", StringComparison.InvariantCultureIgnoreCase)
Au lieu de faire un if (s != String.Empty) tu peux utiliser la méthode String.IsNullOrEmpty (peut être pas dispo en .net 1.x)
lakichemole
Messages postés
253
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
18 mai 2009
-
Jesusonline t'y va pas avec le dos de la cuillère :).
T'es un peux rude quand même :
"Qu'est-ce qui se passe si j'upload la page "CrashServer.aspx" et que je vais à l'adresse /others/CrashServer.aspx ?" à la limite dans son code l'utilisateur ne sais pas que son fichier a été uploader dans ce rep :)
Sinon chui tout d'accord voir même pire on enregistre les fichier avec un nom et une extention sans rapport avec l'originale genre "FILE02155841.up" et apres grâce un subterfuge stratagémique (une base de donnée) on associe le nom de l'originale avec le nouveau nom.
Et enfin grâce à un Handler (.ashx par exemple) qui va bien on gère le download.
D'ailleur merci a toi jesusonline c'est toi qui ma fait découvrir (et à quelques collègues) les ashx que j'utilise largement :).
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
65 -
Salut,

"à la limite dans son code l'utilisateur ne sais pas que son fichier a été uploader dans ce rep :)"
Ne jamais partir du principe que l'utilisateur est intelligent, mais ne pas partir non plus de celui qu'aucun d'entre eux n'est intelligent.
Surtout qu'avec un peu de chance on utilise un nom plus ou moins logique, et donc facile à deviner.

Bref, partir du principe qu'il y en a plus d'un qui l'est plus que nous, et qu'il nous en veux quand même : le stockage dans un répertoire innacessible à la navigation est indispensable ;-)
bensoft2006
Messages postés
2
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 avril 2008
-
ça c'est un principe et a vous de faire la suite pour un programmeur le fichier doit etre sauvgardé avec un nom crepté et le nom doit etre sauvgarder dans un table .
un hackeur peu faire du male si le programmeur est un newbie .

merci ...