2015-07-23 1 views
0

J'ai besoin de télécharger des fichiers à l'aide de mon application Web Java-Spring. Pendant le téléchargement des fichiers de l'application Web, je dois vérifier le type de fichier à télécharger. Selon mon exigence, j'ai besoin de permettre les fichiers Zipped à télécharger.Comment savoir si un fichier compressé contient des fichiers exécutables

Pour faire face aux problèmes de sécurité, le fichier zip doit être filtré pour les fichiers exécutables ou les types de fichiers indésirables, si j'ai une liste de types de fichiers malveillants.

Veuillez nous indiquer comment connaître le type de contenu des fichiers dans un fichier zip, en utilisant java.

+0

duplicata possible de [link] http://stackoverflow.com/questions/14778980/how-to-read-content-of-the-zipped-file-without-extracting-in-java [/ link] – swapedoc

+0

@ swapedoc a vérifié le lien, mais la réponse ne m'a pas aidé. – manoj

+0

même pas ça? http://javabeginnerstutorial.com/code-base/how-to-read-text-file-from-zip-archive/ – swapedoc

Répondre

0

Je suggère d'essayer ce qui suit:

  1. Utilisez le fournisseur de système de fichiers Zip pour accéder aux fichiers ZIP en utilisant l'NIO.2 API File: https://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/zipfilesystemprovider.html
  2. parcourir l'arborescence du fichier: https://docs.oracle.com/javase/tutorial/essential/io/walk.html (il existe aussi des méthodes prenant en charge les flux Java SE 8).
  3. Perfrom les vérifications, par ex. en utilisant Files.isExecutable
0

Vous cherchez à savoir si un fichier zip contient des fichiers ou non. Pour cela, vous pouvez rechercher le contenu du fichier zip pour lire le nom du fichier; à partir des noms de fichiers, vous pouvez trouver quel fichier est un fichier .

public static void printFileList(String filePath){ 

    FileInputStream fis = null; 
    ZipInputStream zipIs = null; 
    ZipEntry zEntry = null; 
    try { 
     fis = new FileInputStream(filePath); 
     zipIs = new ZipInputStream(new BufferedInputStream(fis)); 
     while((zEntry = zipIs.getNextEntry()) != null){ 
      System.out.println(zEntry.getName()); 
     } 
     zipIs.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Entrée

C:\\Users\\Desktop\\New.zip 

Sortie

New/contactsManager 
New/log.txt 
New/timesheet.PNG 

des noms de fichiers de sortie, vous pouvez trouver les fichiers .exe.

0

Avant toute chose, vous devez réécrire le fichier. Les fichiers zip sont "surprenants". Lisez le contenu, vérifiez, écrivez à une nouvelle archive. Ce n'est pas inhabituel et aller encore plus réécrire les fichiers contenus (par exemple, les sites Web réécrireont généralement les images de téléchargement de l'utilisateur).

D'autres choses que vous devriez regarder dehors pour une attaque de traversée de répertoire et un déni de service (bombes de zip).

En règle générale, vous devez ajouter la liste blanche à la liste noire. Probablement vous voulez vérifier l'extension de fichier (et probablement vérifier qu'il n'y a plus de points) et le nombre magique (généralement les quatre premiers octets) d'accord. Les implémentations de la magie de commande UNIX peuvent vous aider.

Il y a quelques particularités. Par exemple, les fichiers zip eux-mêmes peuvent être lus à l'arrière (voir GIFAR). Certains programmes vont ignorer les entrées invalides et passer à quelque chose qu'il peut comprendre. Peut-être qu'un programme cible fera une couche supplémentaire de déballage, disons un gunzip.

+0

oui, je veux ajouter à la liste blanche, au lieu de la liste noire. je ne peux pas vérifier l'extension de fichier seul, il peut y avoir un fichier avec une extension altérée. – manoj