2012-05-20 4 views
1

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

Каков наилучший способ для этого? Идеально то, что будет работать как на окнах, так и на linux-сервере, но в первую очередь на Linux, если теперь и то, и другое.

+1

Почему администраторы должны быть подвержены риску на сервере? Кто их будет исполнять? – JJJ

+1

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

+0

«разрешенный» список файлов, безусловно, будет меньше, чем «недопустимый» –

ответ

2

Я бы рекомендовал вам сохранить белый список разрешенных типов, а не черный список заблокированных. Хотя treat any kind of file-extension based processing as a weak line of defence, так как тривиально обходить этот вид проверки.

Поэтому не просто проверяйте расширение файла. Возможно, стоит проверить, что тип содержимого файла соответствует расширению - см. Расширение Fileinfo. Если вы используете только изображения, вы можете use GD or ImageMagick to reprocess the file.

Наконец, я бы рекомендовал хранить любые загруженные файлы в файловой системе, которая не позволяет выполнять - монтировать с noexec на платформах Linux/UNIX - хотя обратите внимание на то, что isn't really an equivalent on Windows.

+0

+1 и, в PHP, тип контента и тип mime устанавливаются клиентом -> не является хорошим источником информации для целей безопасности. – Jacco

+0

Расширение Fileinfo фактически проверит файл, чтобы получить тип содержимого. Он по-прежнему не является непогрешимым, поскольку он рассматривает только подпись файла. Я бы согласился с тем, что доверять клиенту эти данные было бы плохо. –

Смежные вопросы