php fileinfo достаточен для предотвращения загрузки злонамеренных файлов?

Эй парни, я искал вокруг немного и действительно не нашел профессиональный ответ типа на то, как иметь безопасную fileupload возможность, таким образом, я хотел получить мнение некоторых экспертов по этому сайту. Я в настоящее время позволяю загрузку mp3s и изображений, и в то время как я довольно уверен в предотвращении xss и инжекционных нападениях на мой сайт, я не действительно знаком с fileupload безопасностью. Я в основном просто использую php fileinfo и проверяю массив принятых типов файлов против типа файла. Для изображений существует функция getimagesize и некоторые дополнительные проверки. До хранения их у меня просто есть папка в рамках моего каталога, потому что я хочу, чтобы пользователи смогли использовать файлы. Если бы кто-либо мог бы дать мне некоторые подсказки, я был бы очень признателен за его.

7
задан Scarface 1 April 2010 в 15:25
поделиться

5 ответов

Я обычно вызываю ClamAV , когда принимаю файлы, которые можно разделить. В PHP это довольно легко сделать с помощью php-clamav .

Последнее, что вы хотите сделать, - это распространять вредоносное ПО по всему миру :)

Если можете, делайте это в фоновом режиме после загрузки файла, но перед тем, как сделать его общедоступным. Особенность этого класса заключается в том, что он может загружать всю базу данных определений вирусов ClamAV в память, что почти наверняка будет вонять, если PHP обычно работает под Apache (подумайте о порядке + 120 МБ памяти на экземпляр).

Использование чего-то вроде beanstalkd для сканирования загрузок с последующим обновлением вашей БД, чтобы сделать их общедоступными, - очень хороший способ обойти эту проблему.


Я упомянул об этом только потому, что в других ответах не было, я никоим образом не предполагал, что это будет полное решение. Смотрите другие ответы, размещенные здесь, это шаг, которым вы должны завершить . Всегда, всегда, всегда дезинфицируйте свой ввод, убедитесь, что он соответствует ожидаемому типу и т. Д. (Я уже упоминал, что вам следует прочитать и другие ответы?)

7
ответ дан 6 December 2019 в 12:48
поделиться

Нет, потому что это можно легко подделать. Есть статья , в которой описывается, как сервер может быть атакован путем загрузки «jpg-файла» размером 1x1 и как это предотвратить. Хорошо для чтения.

2
ответ дан 6 December 2019 в 12:48
поделиться

Первое, что нужно сделать, - это отключить выполнение любого кода на стороне сервера (например, PHP) в этом каталоге с помощью конфигурации сервера. Настройка белого списка для типов MIME (или расширений файлов, поскольку ваш сервер использует их, в первую очередь, для определения типа mime) и разрешение только мультимедийных файлов (не HTML или чего-либо еще) защитит вас от инъекций XSS. Те, которые объединены с проверкой типа файла, должны быть вполне достаточными - единственное, что я могу придумать, что могло бы пройти, это вещи, которые используют декодеры изображений / аудио, и для их обнаружения вам понадобится что-то похожее на антивирусный сканер.

1
ответ дан 6 December 2019 в 12:48
поделиться

Начнем с того, что "тип файла" ($_FILES['userfile']['type']) совершенно бессмысленен. Это переменная в HTTP post запросе, которая может быть ЛЮБЫМ ЗНАЧЕНИЕМ по желанию злоумышленника. Уберите эту проверку как можно скорее.

getimagesize() - отличный способ проверить, что изображение настоящее. Звуковые файлы могут быть немного сложнее, вы можете вызвать file /tmp/temp_uploaded_file в командной строке.

Самой важной частью загруженного файла является его расширение. Если файл имеет расширение .php, то вас только что взломали. Дальше - хуже: Apache может быть настроен на игнорирование первого расширения файла, если он его не распознает, а затем использовать следующее расширение, так что этот файл будет выполняться как обычный .php файл: backdoor.php.junk. По умолчанию эта функция должна быть отключена, но несколько лет назад она была включена по умолчанию.

Вы ДОЛЖНЫ ОБЯЗАТЕЛЬНО использовать Белый список расширений файлов. То есть вы хотите принудительно использовать такие файлы, как: jpg,jpeg,gif,png,mp3 и отклонить в противном случае.

2
ответ дан 6 December 2019 в 12:48
поделиться

«вредоносные» файлы - не единственные способ навредить вашему серверу (и если ваш сайт не работает, это повредит вашим пользователям) .


Например, сервер может нанести вред серверу, если загрузить много очень маленьких файлов:

  • он не будет использовать все пространство на диске,
  • но может использовать все доступно inodes ...

... И когда не осталось свободных inode, создать файл больше невозможно; что, очевидно, плохо.


После этого возникают такие проблемы, как:

  • авторское право
  • контент, который не подходит вам или вашим пользователям (нагота?)

Для этого вам нечего делать технические решения - но функция « предупредить модератора » часто бывает полезной; -)

4
ответ дан 6 December 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: