2017-07-11 10 views
1

Je devais vérifier le type de fichier dans le fichier uploader pour déterminer si le fichier était image (jpg, png) et j'ai décidé de le faire en lisant le nombre magique du fichier (4 premiers octets) avec FileReader mais j'ai quelques doutes à propos de cette méthode:Déterminer le type de fichier par nombre magique

  1. Cette méthode est-elle sûre? Y at-il un moyen de télécharger le fichier non jpg en jpg avec cette méthode? J'ai vu des types de fichiers avec des nombres magiques différents de 2, 4, 6 octets ... Donc, si je devais faire une méthode générique pour déterminer non seulement le type d'image, mais aussi les autres, je devrais lire le nombre maximum d'octets (pour déterminer le plus grand nombre magique) du fichier, non?

+0

Qu'est-ce qui rend les fichiers jpg "sûrs" et non-jpgs "dangereux"? – melpomene

+0

https://github.com/DarthSim/carrierwave-bombshelter <- premier paragraphe. Eh bien, c'est un exemple de choses que vous pouvez faire avec des images. Mais si je définis une validation basée uniquement sur l'extension de fichier par exemple, n'importe qui peut renommer un exécutable ou quelque chose comme ça. – Elo

+0

Comment cela s'applique-t-il? La bombe d'image dégonfler est un fichier image parfaitement valide. Et quel est le problème avec le changement de nom d'un exécutable? – melpomene

Répondre

0
  1. Ce n'est pas sûr. Le problème n'est pas seulement dans les nombres magiques mais déjà dans le fait que vous essayez de le valider côté client. Le formulaire peut être téléchargé directement à partir d'un script en contournant la validation côté client. Le bon moyen de le faire est de tout valider côté serveur en utilisant des techniques éprouvées.

  2. Droite. Différents formats de fichiers ont des nombres magiques différents sur différents décalages. Mais encore si vous vous souciez de la sécurité - ne faites confiance à rien.

+0

J'ai oublié de mentionner que je suis aussi en train de valider côté serveur :). Je valide aussi côté client pour l'aperçu (image). Ce que je voulais dire, c'est: Y a-t-il un moyen de contourner les validations des nombres magiques? (Ce que vous dites est de contourner le processus lui-même mais qui est déjà contrôlé). Merci pour votre réponse. – Elo

+0

Pour l'extension de fichier côté client devrait être assez je suppose :) –