56 votes

Comment puis-je me protéger d'une bombe zip?

Je viens de lire sur les bombes zip , c'est-à-dire des fichiers zip contenant une très grande quantité de données hautement compressibles (00000000000000000 ...).

Une fois ouverts, ils remplissent le disque du serveur.

Comment détecter un fichier zip comme une bombe zip avant de le décompresser?

UPDATE Pouvez-vous me dire comment cela se fait en Python ou en Java?

25voto

Nick Dandoulakis Points 26809

Essayez ceci en Python:

 import zipfile
z = zipfile.ZipFile('c:/a_zip_file')
print 'total files size=', sum(e.file_size for e in z.infolist())
z.close()
 

23voto

Le format ZIP est, entre autres, un format "intéressant". Une solution robuste consiste à diffuser les données en flux continu et à vous arrêter lorsque vous en avez assez. En Java, utilisez ZipInputStream plutôt que ZipFile . Ce dernier vous oblige également à stocker les données dans un fichier temporaire, ce qui n’est pas non plus la plus grande des idées.

14voto

mlk Points 7270

Lisant la description sur Wikipedia -

Refuser toute fichiers compressés qui contiennent des fichiers compressés.
Utilisation ZipFile.entrées() pour récupérer la liste des fichiers, puis ZipEntry.getName() pour trouver l'extension de fichier.
Refuser toute fichiers compressés qui contiennent des fichiers sur une taille ou la taille ne peut pas être déterminé au démarrage.
Lors de l'itération sur l'utilisation des fichiers ZipEntry.getSize() pour récupérer la taille du fichier.

5voto

FractalizeR Points 12887

Vérifiez d'abord un en-tête zip :)

4voto

sharptooth Points 93379

Si le décompresseur ZIP que vous utilisez peut fournir les données sur la taille d'origine et compressée, vous pouvez utiliser ces données. Sinon, commencez à décompresser et surveillez la taille de la sortie - si elle grossit trop, coupez-la.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X