Dans mon application Web (asp.net, c #), je télécharge un fichier vidéo dans une page mais je souhaite télécharger uniquement des vidéos flv. Comment puis-je restreindre la mise en ligne d'autres vidéos d'extension?
Cela permet à quelqu'un de simplement renommer n'importe quel fichier * .flv et de le télécharger. En fonction de vos besoins, vous pouvez également vérifier le type MIME.
David Glenn
Le type MIME n'est-il généralement pas défini en fonction de l'extension de nom de fichier?
Thilo
@Thilo, vous avez raison, mais l'extension peut être modifiée sans changer le type de contenu mime. Le type mime décrit les données contenues dans le fichier, donc il peut être manipulé de manière appropriée voir en.wikipedia.org/wiki/MIME
Mark Dickinson
2
Non, le meilleur moyen est de vérifier le contenu du fichier. Il est nécessaire de vérifier la signature flv.
Marat Faskhiev
Juste pour ajouter à cela, car c'est toujours une réponse populaire - l'argument de type MIME est tout aussi peu sûr que l'extension car les deux peuvent être usurpés. Une combinaison des deux vérifications est probablement une solution raisonnable , mais en fin de compte, si la sécurité est un problème, il devrait y avoir des vérifications plus rigoureuses, par exemple le blocage des fichiers non signés ou l'échantillonnage de contenu.
James
21
Vous pouvez simplement lire le flux d'un fichier
using (var target =newMemoryStream()){
postedFile.InputStream.CopyTo(target);vararray= target.ToArray();}
Les premiers index 5/6 vous indiqueront le type de fichier. Dans le cas du FLV, ses 70, 76, 86, 1, 5 .
Cela devrait être noté plus haut. Si vous voulez vraiment que votre application fonctionne et que les données ne sont pas fiables, vous devez vérifier le début.
PRMan
7
Sur le serveur, vous pouvez vérifier le type MIME, rechercher le type mime flv ici ou sur google.
Vous devriez vérifier que le type mime est
video/x-flv
Si vous utilisiez un FileUpload en C # par exemple, vous pourriez faire
Vous ne pourrez pas restreindre le type de fichier que l'utilisateur télécharge côté client [*]. Vous ne pourrez le faire que du côté serveur. Si un utilisateur télécharge un fichier incorrect, vous ne pourrez le reconnaître qu'une fois le fichier téléchargé. Il n'existe aucun moyen fiable et sûr d'empêcher un utilisateur de télécharger le format de fichier qu'il souhaite.
[*] Oui, vous pouvez faire toutes sortes de choses intelligentes pour détecter l'extension de fichier avant de démarrer le téléchargement, mais ne vous y fiez pas. Quelqu'un va contourner le problème et télécharger ce qu'il veut tôt ou tard.
Bien qu'il ne puisse pas empêcher un pirate de télécharger ce qu'il veut, il doit quand même vérifier du côté client pour la commodité de l'utilisateur. Les téléchargeurs Flash devraient pouvoir vérifier le type de fichier.
Thilo du
1
Le PO n'a pas mentionné les téléchargeurs Flash (c'est-à-dire les «téléchargeurs écrits en Flash», plutôt que les «téléchargeurs de contenu Flash»). La question est étiquetée avec les balises asp.net et c #, et avec ces choix technologiques, la vérification côté client est limitée et facilement vaincue. :)
ZombieSheep
Pour un site de téléchargement de vidéos, il devrait avoir quelque chose de mieux côté client qu'un formulaire de téléchargement HTML. Les téléchargements de plusieurs Mo sans barre de progression ne sont pas amusants.
Thilo
ok vous dites que la vérification côté client n'est pas très bonne comment puis-je m'enregistrer côté serveur M. ZombieSheep
Surya sasidhar
@Thilo - Je ne pourrais pas être plus d'accord, mais la question concerne un formulaire de téléchargement ASP.net. C'est à l'OP s'il pense que c'est assez bien ou pas.
ZombieSheep
2
Vous pouvez vérifier la signature .flv. Vous pouvez télécharger les spécifications ici:
J'ai trouvé une solution alternative chez DotNetPerls que j'ai mieux aimé car elle ne vous oblige pas à spécifier un chemin. Voici un exemple où j'ai rempli un tableau à l'aide d'une méthode personnalisée
// This custom method takes a path // and adds all files and folder names to the 'files' arraystring[] files =Utilities.FileList("C:\", "");// Then for each array item...foreach(string f in files){// Here is the important line I used to ommit .DLL files:if(!f.EndsWith(".dll",StringComparison.Ordinal))// then populated a listBox with the array contents
myListBox.Items.Add(f);}
La méthode ci-dessus fonctionne bien avec Firefox et IE, je suis capable de visualiser tous les types de fichiers comme zip, txt, xls, xlsx, doc, docx, jpg, png
mais quand j'essaye de trouver l'extension de fichier de googlechrome, j'ai échoué.
Réponses:
Path.GetExtension
la source
Vous pouvez simplement lire le flux d'un fichier
Les premiers index 5/6 vous indiqueront le type de fichier. Dans le cas du FLV, ses 70, 76, 86, 1, 5 .
si
isAllowed
égaletrue
alors son FLV.OU
Lire le contenu d'un fichier
Les deux / trois premières lettres vous indiqueront le type de fichier.
En cas de FLV, son "FLV ......"
la source
Sur le serveur, vous pouvez vérifier le type MIME, rechercher le type mime flv ici ou sur google.
Vous devriez vérifier que le type mime est
Si vous utilisiez un FileUpload en C # par exemple, vous pourriez faire
la source
Je ne sais pas si c'est ce que vous voulez mais:
Ou:
la source
De plus, si vous en avez un
FileInfo fi
, vous pouvez simplement faire:et il contiendra l'extension du fichier (note: il inclura le
.
, donc un résultat de ce qui précède pourrait être:,.jpg
.txt
et ainsi de suite ....la source
Vous ne pourrez pas restreindre le type de fichier que l'utilisateur télécharge côté client [*]. Vous ne pourrez le faire que du côté serveur. Si un utilisateur télécharge un fichier incorrect, vous ne pourrez le reconnaître qu'une fois le fichier téléchargé. Il n'existe aucun moyen fiable et sûr d'empêcher un utilisateur de télécharger le format de fichier qu'il souhaite.
[*] Oui, vous pouvez faire toutes sortes de choses intelligentes pour détecter l'extension de fichier avant de démarrer le téléchargement, mais ne vous y fiez pas. Quelqu'un va contourner le problème et télécharger ce qu'il veut tôt ou tard.
la source
Vous pouvez vérifier la signature .flv. Vous pouvez télécharger les spécifications ici:
http://www.adobe.com/devnet/flv/
Voir le chapitre "L'en-tête FLV".
la source
Se termine par()
J'ai trouvé une solution alternative chez DotNetPerls que j'ai mieux aimé car elle ne vous oblige pas à spécifier un chemin. Voici un exemple où j'ai rempli un tableau à l'aide d'une méthode personnalisée
la source
La méthode ci-dessus fonctionne bien avec Firefox et IE, je suis capable de visualiser tous les types de fichiers comme zip, txt, xls, xlsx, doc, docx, jpg, png
mais quand j'essaye de trouver l'extension de fichier de googlechrome, j'ai échoué.
la source
Il convient de mentionner comment supprimer l'extension également en parallèle avec l'obtention de l'extension:
la source
Cette solution aide également dans le cas de plusieurs extensions comme "Avishay.student.DB"
la source