Как быть уверенным, что они загружают определенные файлы? - PullRequest
7 голосов
/ 24 июня 2011

Хорошо, я разрешаю (в пределах скрипта) загружать файлы определенных типов с помощью подхода, определенного администратором форума!Как я могу определить, относятся ли эти файлы к типу, заданному администратором, чтобы убедиться, что они не являются поддельными.В настоящее время я использую подход MIME-типов, но разные браузеры могут устанавливать разные MIME-типы, так что это не очень помогает.Проверка расширения файла также не помогает, так как люди могут обойти это, предоставив ему разрешенное расширение, но имеющее другой тип файла.

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

Может кто-нибудь помочь мне с идеями по этому поводу?

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

PECL fileinfo (или встроенный> 5.3) будет проверять байтовые подписи файлов, чтобы угадать их mimetypes, поэтому он защищает от людей, просто меняющих расширение файла. В некоторых случаях все еще возможно включить вредоносные байты в файл, который соответствует соответствующей байтовой подписи для типа файла.

Из документации PHP:

// Procedural style
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
echo finfo_file($finfo, $filename);
finfo_close($finfo);

// OO style
$finfo = new finfo(FILEINFO_MIME_TYPE);
echo $finfo->file($filename);
$finfo->close();

Я считаю, что на сервере Unix finfo_file() обращается к той же базе данных сигнатур байтов, что и утилита GNU file.

0 голосов
/ 24 июня 2011

Никогда не доверяйте пользовательскому вводу. Проверка на наличие определенного типа файла / mimetype никогда не должна использоваться в качестве способа предотвращения загрузки вредоносного содержимого на ваш сервер. Если целью является безопасность сервера, то просто не позволяйте контенту выполняться на сервере, если он загружен пользователем. Для файлов, которые загружают другие люди, обязательно сделайте заявление об отказе от ответственности за то, что контент был создан пользователем и не гарантированно не содержит вирусов.

...