Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать размер сжатых файлов в архиве zip
 
 автор: Ferro7   (16.07.2010 в 20:19)   письмо автору
 
 

Использую класс PHP ZipArchive для работы с архивами zip, которые пользователи могут загружать мне на сервер. По ходу разработок задумался над проблемами архивных бомб, т.е. таких архивов, которые могут содержать несколько гигабайт файлов при размере архива всего в несколько килобайт.
Так вот, как, используя в проекте PHP, узнать размер сжатых файлов в архиве zip?
В доках PHP к ZipArchive абсолютно ничего нет про размер файлов в архиве. Может, можно как-то через функции pack/unpack, как в одном примере по получению информации из файла mp3?

  Ответить  
 
 автор: sim5   (16.07.2010 в 20:33)   письмо автору
 
   для: Ferro7   (16.07.2010 в 20:19)
 

Это какой архив может сжать несколько ГБ до нескольких КБ?

  Ответить  
 
 автор: sms-send   (16.07.2010 в 20:51)   письмо автору
 
   для: sim5   (16.07.2010 в 20:33)
 

Да любой приличный архиватор может.

  Ответить  
 
 автор: sim5   (16.07.2010 в 20:54)   письмо автору
 
   для: sms-send   (16.07.2010 в 20:51)
 

Даже так? Нука сожмите "приличным" аврхиватором mp3, видео, картинки и т.п., размером в 3 гига до нескольких КБ и выложите здесь.
Ну а чтобы написать текст в 3 ГБ, так это надо сильно постараться.

  Ответить  
 
 автор: sms-send   (16.07.2010 в 21:01)   письмо автору
3.1 Мб
 
   для: sim5   (16.07.2010 в 20:54)
 

> сожмите "приличным" аврхиватором mp3, видео, картинки и т.п
Эээм.. это тут каким боком? Речь о намеренно создаваемых архивах с конкретной целью - в данном случае навредить... сам такое делал когда то очень давно.. паковал файлик в RAR-SFX, записывал на диск в комплекте с autorun.inf... конечно только ради шутки)


> Ну а чтобы написать текст в 3 ГБ, так это надо сильно постараться.
Текст, не текст.. не важно, главное чтобы данные были с закономерностью, которую сможет определить алгоритм архиватора.

<?php

set_time_limit
(0);
$f fopen('m:\bigfile.txt''w');
$str str_repeat("sim5\r\n"1000);
$strlen strlen($str);
for(
$i 0$i<=(1024*1024*1024*5); $i+=$strlen)
    
fwrite($f$str);
fclose($f);


В аттаче архив.

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:06)   письмо автору
 
   для: sms-send   (16.07.2010 в 21:01)
 

Любым боком. Есть архиватор сжимающий действительно прилично, но распаковка его архива, это очень длительный процесс, который для сети не годится, да и не до килобайтов он жмет гигабайты. Остальные просто не способны такое сделать, тем более с mp3 файлами.

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

  Ответить  
 
 автор: sms-send   (16.07.2010 в 21:19)   письмо автору
260.7 Кб
 
   для: sim5   (16.07.2010 в 21:06)
 

Насчёт мегабайтов/килобайтов это я буду считать придиркой. Какая разница, если и то и то можно загрузить и потенциально причинить вред?

Если это так важно... аттач.

> Я о реальности.
Так и я о ней, в этой самой реальности придёт реальный зловредный юзер и подбросит такую реальную гадость.

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:23)   письмо автору
 
   для: sms-send   (16.07.2010 в 21:19)
 

Еще раз:

>Это какой архив может сжать несколько ГБ до нескольких КБ?
>Да любой приличный архиватор может.

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

  Ответить  
 
 автор: sms-send   (16.07.2010 в 21:26)   письмо автору
 
   для: sim5   (16.07.2010 в 21:23)
 

Значит предложения надо понятней строить. Слово "архив" было воспринято как сокращённое подлежащее, а подлежащего там, оказывается, и в помине нет.

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:29)   письмо автору
 
   для: sms-send   (16.07.2010 в 21:26)
 

Я спрашивал не вас, и явно не о подделках. Так что о притензиях о непонятности моего вопроса не стоит.

  Ответить  
 
 автор: sms-send   (16.07.2010 в 21:45)   письмо автору
 
   для: sim5   (16.07.2010 в 21:29)
 

> Я спрашивал не вас
Не меня. Но на форуме это не имеет значения. Сообщения доступны для чтения всем, ответить тоже имеет возможность кто угодно, даже я.

  Ответить  
 
 автор: ddhvvn   (16.07.2010 в 23:08)   письмо автору
 
   для: sim5   (16.07.2010 в 21:23)
 

> Если бы не ночь, заматерился бы, ей богу.
Это как раз самое подходящее время ;))

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 21:16)   письмо автору
 
   для: sim5   (16.07.2010 в 20:33)
 

Да тот же самый винрар со своим "умным" алгоритмом догадается, что если данные повторяются, то их можно _ОЧЕНЬ_ удачно сжать, если правильно отбросить повторяющиеся данные. Подобная идея используется и в форматах изображений сжимающие изображение без потери качества, в частности в GIF

А что бы создать архивную бомбу не нужно быть гением. Я например, только что создал текстовой документ, открыл его с помощью AkelPad (тот же блокнот, только умеет работать с большими файлами), методом зажатия нужных клавиш создал в нём 50 млн нулей (0), сохранил, что дало файл весом 50 Мб, сжал его винраром в зип архив, указав максимальное сжатие. На выходе получил компактный архивчик весом 50 Кб. Итого - сжатие в 1000 раз.

У меня на на сервер через мой онлайн-сервис пользователь может загружать зип архивы до 50 Мб. Думаю, в 50Мб можно уложить много дерьма, которое, если его сервер начнёт распаковывать, сильно займёт его дисковое пространство.

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:20)   письмо автору
 
   для: Ferro7   (16.07.2010 в 21:16)
 

RAR никогда не сожмет реальный mp3 в несколько МБ до килобайтов. Не надо ерунду пороть. Да и не о бомбе я спрашивал оппонента, это совсем иной вопрос, а реальности такого сжатия, что он утверждает.

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 21:28)   письмо автору
 
   для: sim5   (16.07.2010 в 21:20)
 

Ну mp3 да, врядли сожмёт. Мп3 - это всё таки уже формат сжатых данных. Вообще, сейчас многие форматы для мультимедиа подразумевают как можно плотное упаковывание данных. А иначе фильм двд-качества весил бы сотни гигабайт.
А sms-send всё таки помоему нигде и не написал, что он может сжать мп3. Он пишет примерно то же, что и я: если постараться, можно создать архив в несколько килобайт, а при распаковке он займёт на винте в тысячи раз больше собственного веса архива.

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:33)   письмо автору
 
   для: Ferro7   (16.07.2010 в 21:28)
 

Если постараться вас обмануть, это иное. А вот сжимать для сервера mp3 файлы в реальности, другими словами принимать от пользователя в таком виде, имеет смысл только в том случае, если их уж очень крепко заховать от бдительных авторов. А иначе какой смысл?

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 21:45)   письмо автору
 
   для: sim5   (16.07.2010 в 21:33)
 

На любой даже самый крутой сайт аля Пентагон найдётся свой хакер, я вот так думаю ))
Т.е. всегда надо проверять, что приходит от пользователя, любые данные.
И насчёт mp3: в таких файлах в первых байтах стоит сигнатура аля "привет мир, мой тип - mp3". Т.е. я могу в свой раннее созданный текстовой документ вставить этих несколько первых байт из файла mp3, сохранить получившееся чудо под расширением .mp3 и вот, пожалуйста, у меня получится mp3 файл, который можно будет сжать в 1000 раз. НО: я не гарантирую, что он проиграется, но всё же.. по всем другим признакам, это будет наш mp3 :)

P.S. Мне пользователи в архивах загружают не mp3 ))))

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:52)   письмо автору
 
   для: Ferro7   (16.07.2010 в 21:45)
 

Вот оно как... Просто я прочитал, что вы интересовались полученим заголовка, mp3 файла, потому и решил такое. В общем подумал, что вы сами себе излишние проблемы создаете.
Если же вопрос стоит так, то в rar нет, насколько я знаком, извлечение кусочка файла из архива. Да и если говорить о бомбах, так уж бомбить до конца, я как раз буду делать то, что вы называете аля "привет мир, мой тип - mp3".

  Ответить  
 
 автор: sms-send   (16.07.2010 в 21:46)   письмо автору
 
   для: sim5   (16.07.2010 в 21:33)
 

> А иначе какой смысл?
Архив может использоваться не только для сжатия данных, но и для банального собирания нескольких файлов в один. Если пользователь хочет загрузить сотню фоток в альбом, заполнять поочерёдно 100 полей формы ему будет достаточно скучно.

Ничего, что я опять имею наглость отвечать на вопрос, адресованный не мне?

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 21:52)   письмо автору
 
   для: sms-send   (16.07.2010 в 21:46)
 

> Ничего, что я опять имею наглость отвечать на вопрос, адресованный не мне?

Ничего ))

  Ответить  
 
 автор: sim5   (16.07.2010 в 21:54)   письмо автору
 
   для: sms-send   (16.07.2010 в 21:46)
 

Я же не утверждаю, что архивом этого нельзя делать, это раз. Загружать сотню фоток архивом, я мог бы позволить только очень доверенным лицам, ибо проверять в таком архиве бомы я бы не стал.

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 22:03)   письмо автору
 
   для: sim5   (16.07.2010 в 21:54)
 

Кто пользуется юкозом? Я пользуюсь. У них модуль "Фотоальбом" позволяет загружать сразу несколько фоток в архиве. Очень удобно. И ни о каких доверенных лицах речь не идёт.
ИМХО: не стоит ограничивать пользователя в действиях (мол, если не доверенное лицо, то иди нах и т.п.). Главное - чтобы всё контролировалось и проверялось.

  Ответить  
 
 автор: sim5   (16.07.2010 в 22:05)   письмо автору
 
   для: Ferro7   (16.07.2010 в 22:03)
 

Сотню фоток архивом на сервер?

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 22:17)   письмо автору
 
   для: sim5   (16.07.2010 в 22:05)
 

Там кажется, ограничение на 20 фоток в архиве, точно не помню. Блин.. надо бы попробовать на досуге создать архивную бомбу, загрузить туда и глянуть, что получиться)))

  Ответить  
 
 автор: sim5   (16.07.2010 в 22:22)   письмо автору
 
   для: Ferro7   (16.07.2010 в 22:17)
 

Взрыв и клубы дыма в браузере.;-)
Ну вот, ограничения. И я бы 100 не разрешил. Мало того, что могут туфту подкинуть, но ведь еще могут забросить просто как "бесхозный груз"... нет, уж лучше по-старинке.

  Ответить  
 
 автор: sms-send   (16.07.2010 в 22:39)   письмо автору
 
   для: sim5   (16.07.2010 в 22:22)
 

> Ну вот, ограничения.
Напомню, что в контексте темы не имеет значения 100, 20 или 1 файл в архиве.
А какую туфту нельзя по традиционной "старинке" подкинуть? Единственная гадость - упакованная "бомба" - распознаётся и отсекается элементарно проверкой размера упакованных файлов, в остальном, вроде бы, отличий нет. Тогда зачем ограничивать пользователя в удобстве?

  Ответить  
 
 автор: sim5   (16.07.2010 в 22:53)   письмо автору
 
   для: sms-send   (16.07.2010 в 22:39)
 

Напомню, что я тоже не говорил, что по-старинке нельзя туфту закинуть. Просто открый файл легче проверить, а если речь идет об архиве, то лучше ограничить его вложение.
Вы сказали о сотне файлов, я ответил в этом ключе. Собвственно не обязательно размер может быть фиктивным, он может быть и "легальным", но будут подделаны заголовки, либо подцеплены "нелегальные" фрагменты к файлам. Все это надо проверять.
Дело хозяйское, вы вольны поступать как хотите, и давать любую вольность своим пользователям, я же вас не заставляю делать так, как я хочу. Я же буду ограничивать вложения, если это архив, либо количество файлов при прямой загрузке.

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 21:50)   письмо автору
 
   для: Ferro7   (16.07.2010 в 20:19)
 

Кстати, с помощью гугл-ответов нашёл это http://php.russofile.ru/ru/authors/unsort/zip/ - попробуем курнуть эту травку..

  Ответить  
 
 автор: Ferro7   (16.07.2010 в 22:01)   письмо автору
 
   для: Ferro7   (16.07.2010 в 21:50)
 

о, всё гениальное просто.. http://www.php.net/manual/en/ref.zip.php
в комментариях есть пользовательская функция decompress_first_file_from_zip - в ней размер файлов в архиве определяется довольно просто

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования