Как я могу защитить себя от бомбы на молнии? - PullRequest
50 голосов
/ 22 сентября 2009

Я только что прочитал о почтовых бомбах , то есть почтовых файлах, которые содержат очень большое количество сжимаемых данных (00000000000000000 ...).

При открытии они заполняют диск сервера.

Как я могу определить, является ли zip-файл бомбой на молнии перед тем, как разархивировать ее?

ОБНОВЛЕНИЕ Можете ли вы сказать мне, как это делается в Python или Java?

Ответы [ 7 ]

21 голосов
/ 22 сентября 2009

Попробуйте это на 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()
19 голосов
/ 22 сентября 2009

Zip - это «интересный» формат. Надежное решение - это поток данных и остановка, когда вам будет достаточно. В Java используйте ZipInputStream вместо ZipFile. Последнее также требует, чтобы вы сохранили данные во временном файле, что тоже не самая лучшая идея.

11 голосов
/ 22 сентября 2009

Чтение над описанием в Википедии -

Запретить любые сжатые файлы, содержащие сжатые файлы.
Используйте ZipFile.entries () для получения списка файлов, затем ZipEntry.getName () , чтобы найти расширение файла.
Запретить любые сжатые файлы, которые содержат файлы с установленным размером, или размер не может быть определен при запуске.
При переборе файлов используйте ZipEntry.getSize () , чтобы получить размер файла.

5 голосов
/ 22 сентября 2009

Не позволяйте процессу загрузки писать достаточно данных для заполнения диска, т. Е. Решить проблему, а не только одну из возможных причин проблемы.

5 голосов
/ 22 сентября 2009

Сначала проверьте почтовый заголовок:)

4 голосов
/ 22 сентября 2009

Если распаковщик ZIP, который вы используете, может предоставить данные в оригинальном и сжатом размере, вы можете использовать эти данные. В противном случае начните расстегивать молнию и следите за размером выходного документа - если он слишком вырос, обрежьте его.

1 голос
/ 22 сентября 2009

Убедитесь, что вы не используете системный диск для временного хранения. Я не уверен, что вирусуссканер проверит это, если столкнется с этим.

Также вы можете посмотреть информацию в zip-файле и получить список содержимого. Как это сделать, зависит от утилиты, используемой для извлечения файла, поэтому вам нужно предоставить дополнительную информацию здесь

...