files java python security compression zip

java - files - python unzip file



¿Cómo puedo protegerme de una bomba zip? (7)

Acabo de leer acerca de las bombas zip , es decir, archivos zip que contienen una gran cantidad de datos altamente comprimibles (00000000000000000 ...).

Cuando se abren, llenan el disco del servidor.

¿Cómo puedo detectar que un archivo zip es una bomba zip antes de descomprimirlo?

ACTUALIZACIÓN ¿Puede decirme cómo se hace esto en Python o Java?


Asegúrese de no estar utilizando la unidad del sistema para el almacenamiento temporal. No estoy seguro si un virusscanner lo comprobará si lo encuentra.

También puede ver la información dentro del archivo zip y recuperar una lista del contenido. Cómo hacer esto depende de la utilidad utilizada para extraer el archivo, por lo que debe proporcionar más información aquí


Leyendo la descripción en Wikipedia -

Denegar cualquier archivo comprimido que contenga archivos comprimidos.
Utilice ZipFile.entries() para recuperar una lista de archivos, luego ZipEntry.getName() para encontrar la extensión del archivo.
Denegar cualquier archivo comprimido que contenga archivos de un tamaño determinado, o el tamaño no se puede determinar al inicio.
Al iterar sobre los archivos, use ZipEntry.getSize() para recuperar el tamaño del archivo.


No permita que el proceso de carga escriba suficientes datos para llenar el disco, es decir, resuelva el problema, no solo una posible causa del problema.


Prueba esto 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()


Si el descompresor ZIP que utiliza puede proporcionar los datos en tamaño original y comprimido, puede usar esos datos. De lo contrario, comience a descomprimir y monitorear el tamaño de salida; si crece demasiado, ciérrelo.


Verifique un encabezado zip primero :)


Zip es, erm, un formato "interesante". Una solución robusta es transmitir los datos y detener cuando haya tenido suficiente. En Java, use ZipInputStream lugar de ZipFile . Este último también requiere que almacene los datos en un archivo temporal, que tampoco es la mejor idea.