2008-10-28 5 views
4

Comment vérifier le type d'un fichier téléchargé de manière fiable sans utiliser l'extension? Je devine que vous devez examiner l'en-tête/lire certains des octets, mais je n'ai vraiment aucune idée de comment s'y prendre. Im en utilisant C# et asp.net.Comment vérifier le contenu d'un fichier téléchargé sans compter sur son extension?

Merci pour tout conseil.


ok, donc à partir des liens ci-dessus, je sais maintenant que je suis à la recherche pour « ff ff d8 e0 » pour identifier positivement un fichier .jpg par exemple.

Dans mon code, je peux lire les vingt premiers octets aucun problème:

   FileStream fs = File.Open(filePath, FileMode.Open); 
       Byte[] b = new byte[20]; 
       fs.Read(b, 0, 20); 

donc (et s'il vous plaît excuser mon manque d'expérience totale ici), mais comment puis-je vérifier si le tableau d'octets contient « ff d8 ff e0 » ?

Répondre

3

Voici une réponse rapide et sale à la question de suivi que vous avez posté:

byte[] jpg = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 }; 
bool match = true; 
for (int i = 0; i < jpg.Length; i++) 
{ 
    if (jpg[i] != b[i]) 
    { 
     match = false; 
     break; 
    } 
} 
1

Les premiers octets d'un fichier indiquent souvent le type de fichier. Voir, par exemple,
http://www.garykessler.net/library/file_sigs.html
http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html

Utilisez System.IO pour lire les byes comme binaire après le téléchargement.

Je suis curieux, cependant, pourquoi vous ne pouvez pas compter sur l'en-tête ContentType?

+0

parce que j'utilise un composant qui diffuse tout en binaire! – flesh

+0

Le premier lien est beaucoup plus complet que le second. –

+2

Vous ne pouvez pas compter sur Content-Type, car le client peut être hostile et revendiquer délibérément un type de contenu incorrect dans le cadre d'une attaque. Il est préférable de ne pas faire confiance à Content-Type que de faire confiance aux extensions de fichiers. –

2

C'est en effet ce que fait le programme Unix file, avec plus ou moins de fiabilité. En partie, cela dépend si les programmes dont vous essayez de détecter les fichiers émet un en-tête de fichier; le programme tar est notoire pour ne pas le faire. Cela dépend du nombre de types de fichiers que vous avez l'intention d'essayer et de reconnaître, mais il pourrait être plus simple d'utiliser une implémentation de file; il reconnaît de nombreux types de fichiers, et les versions modernes sont extensibles via un fichier de définitions de types de fichiers supplémentaires pouvant gérer une multitude de scénarios.

1

Wotsit est une bonne ressource pour trouver les nombres magiques pour différents types de fichiers.

0

Lecture du contenu du fichier est le fou ainsi la preuve. Puisque vous le construisez dans .Net, vous pouvez probablement vérifier le type MIME du fichier téléchargé.

Vous pouvez DllImport urlmon.dll pour aider. S'il vous plaît se référer un poste à: http://coding-passion.blogspot.com/2008/11/validating-file-type.html

Et pour clarifier concernant le type de contenu, il est invariablement conduit par l'extension du fichier. Ainsi, même un fichier .zip a été renommé en .txt, le type de contenu indiquera toujours Texte seulement.

Questions connexes