X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Как проверить, что загруженный файл на сервер - zip-архив?
sc2r2bey
sc2r2bey
Topic Starter сообщение 10.12.2010, 15:29; Ответить: sc2r2bey
Сообщение #1


как проверить, что загруженный файл на сервер - zip-архив?

т.е. файл созданный при помощи архиватора, упаковав один или несколько файлов, не через проверку расширения и mime-типа, которые легко подделать?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 10.12.2010, 17:33; Ответить: gaaarfild
Сообщение #2


Наверно, распаковать его))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 10.12.2010, 18:47; Ответить: ZiTosS
Сообщение #3


surfer, если почитать инфу про ZIP (wikipedia.en - zip, Работаем с ZIP-файлами), данный формат файла содержит заголовки, которые можно прочитать и сверить.
ZIP-файл начинается с последовательностей записей четырех типов:
LOCREC, CENTREC, ENDREC, EXTREC

Каждая запись начинается с метки 'PK'
(0x504B) и типа записи:

(0x0102) - CENTREC
(0x0304) - LOCREC
(0x0506) - ENDREC
(0x0708) - EXTREC

Получаем код проверки:
[php]<?php

// разрешенные первые 4 байта => 504b - PK, остальное - тип архива
$allow_zip = array(
"504b0102",
"504b0304",
"504b0506",
"504b0708"
);

$filename_zip = "file.zip"; // имя файла для проверки

// проверяем наличие файла и если существует, пытаемся открыть его на чтение
if( !file_exists($filename_zip) || ($res = fopen($filename_zip, 'r')) == false )
exit('Не могу получить доступ к файлу');

$flag = ""; // сверяемая строка (4 байта)

// считываем первые 4 байта из файла
for($i = 0; $i < 4; $i++)
if( ($sym = fgetc($res)) !== false ) // если не конец файла (EOF)
$flag .= $sym; // заносим символ в флаг

$flag = bin2hex($flag); // преобразуем бинарную строку в 16-ричную.

echo in_array($flag, $allow_zip) ? "ZIP" : "NOT ZIP"; // если флаг попадает в разрешенные - то ZIP, иначе NOT ZIP

?>[/php]
Проверил на файлах типов: zip, gz, tgz, tar, xls. Всё работает нормально.

P.s.: Советую всё равно так же проверять по Mime и расширению, так часть сразу отбросим :)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как в пушсетках покупают по 100-200 тысяч кликов за день?
2 Boymaster 697 Вчера, 17:52
автор: Boymaster
Горячая тема (нет новых ответов) Как вы отдыхаете от работы за компом
151 adw-kupon.ru 19864 23.4.2024, 13:52
автор: Vmir
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
20 uahomka 3477 23.4.2024, 11:54
автор: Skyworker
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВо что Вы играете?
400 Vmir 67986 20.4.2024, 18:39
автор: SaintExchange
Горячая тема (нет новых ответов) Во что сегодня инвестировать?
Делимся своими приносящими прибыль вариантами
76 traveliver 5097 20.4.2024, 18:27
автор: SaintExchange


 



RSS Текстовая версия Сейчас: 25.4.2024, 15:21
Дизайн