С каждым файлом связан тип MIME?

Недавно я внедрил систему безопасности, в которой мы проверяем типы MIME и расширения файлов по списку приемлемых. Если отсканированный файл имеет MIME и расширение в этом списке, мы продвигаемся вперед. Я включил функцию, где мы сканируем файл ниже. ALLOWED_EXTENSIONS а также ALLOWED_MIME_TYPES это просто строки, такие как «TXT, PDF, JPEG …».

Я предполагаю, что вы знаете, что и как работают типы MIME, но в последнее время мы получаем загрузки PDF без типов MIME вообще. Кстати, этот код работает большую часть времени. Я видел, как PDF проходят нормально, а также изображения, текстовые файлы и т. Д.

Возможно ли, что файл не будет иметь тип MIME вообще?

 /**
* scan the file before upload to do our various security checks
*
* @param  tmpName    the file's location in /tmp, used for MIME type scan
* @param  name       the filename as it was uploaded, used for extension scan
* @param  oid        the order id, passed along to notifyStaffIllegalFileUpload() if email needs to be sent
* @return            true on success, error string on failure
*/
function scanFile($tmpName, $name, $oid) {
global $_email;

// get lists from config
$allowedExtensions = explode(",", ALLOWED_EXTENSIONS);
$allowedMIMEs = explode(",", ALLOWED_MIME_TYPES);

// get extension
$ext = pathinfo($name, PATHINFO_EXTENSION);

// get MIME type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $tmpName);
finfo_close($finfo);

// check against allowed
if (!in_array(strtolower($ext), $allowedExtensions) || !in_array(strtolower($mime), $allowedMIMEs)) {
capDebug(__FILE__, __LINE__, "Order #" . $oid . " - A user attempted to upload a file with extension '" . $ext . "' and MIME type '" . $mime . "'. The attempt was blocked.\n", "/tmp/file_errors.log");
$_email->notifyStaffIllegalFileUpload($oid, $name, $ext, $mime);
return "Our security systems detected an illegal file type/mime type. The file upload was cancelled.";
}

return true;
}

2

Решение

Помимо собственного ответа ОП (который не пытается ответить на реальный вопрос), это не очень четко определено. Тип контента application/octet-stream является общим, и поэтому может быть назначен каждому файлу. С другой стороны, очевидно, можно создавать файлы, которые не имеют полезным Тип содержимого; как бы вы назвали вывод dd if=/dev/urandom с точки зрения типа MIME?

В рамках вопроса здесь я склоняюсь к «нет» — невозможно присвоить полезный тип MIME каждому возможному файлу.

1

Другие решения

После нескольких дней исследований и советов ответ на вопрос становится неуместным из-за того, что проверка типов MIME в качестве функции безопасности в первую очередь невозможна. Существует слишком много проблем с типами MIME в разных операционных системах, разные приложения сохраняют файлы по-разному, некоторые файлы вообще не имеют MIME и, наконец, тот факт, что злоумышленник или программа могут изменить расширение и MIME. Закрытие.

0

По вопросам рекламы [email protected]