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

Я думаю о сохранении загруженных документов в папку вне webroot и загрузке загрузок с помощью скрипта, используя readfile(file).

Однако мне интересно, будет ли достаточно следующего для устранения любых угроз:

$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "doc") && ($_FILES["uploaded_file"]["type"] == "application/msword"))
{
execute rest of the code
}

Я читал людей, которые рекомендовали использовать finfo_open(), но мой сервер работает под php 5.3.0, поэтому я не могу его использовать. Я пытался использовать mime_content_type(), но он всегда выдает мне «текст / обычный текст» с любым типом файла, через который я отправляю (я не знаю, делаю ли я что-то не так с этим).

Могу ли я добавить что-нибудь, чтобы сделать этот процесс более безопасным?

1 Ответ

2 голосов
/ 15 июня 2011

Одна проблема, с которой вы неизбежно столкнетесь, заключается в том, что браузеры могут ненадлежащим образом маркировать mime-тип файла. Например, существует распространенная ошибка Firefox, которая может пометить большинство файлов как application / octet-stream, даже если файл действительно является файлом doc, pdf или xls и т. Д. «Самое безопасное», что нужно сделать, - это сканировать файловый сервер, который также должен включать проверку на вирусы. Однако, если у вас ограниченный доступ к серверу, вы не сможете сделать это.

Я использовал ClamAv (http://www.clamav.net/lang/en/) в прошлом, чтобы сделать это.

Подробнее см. http://sourceforge.net/projects/php-clamav/.

...