У меня есть скрипт проверки подлинности PHP MIME для проверки файлов, загружаемых на веб-сайт. Проблема с текущим решением, что можно легко переименовать dodgy.php, чтобы стать безвредным.pdf, и он пройдет проверку и загрузку ... Я думаю, мне нужно использовать логику finfo_file PHP 5 для более точного проверки файла, но не уверен, как лучше всего интегрировать это в мое текущее решение ... Любые советы? Текущее закодированы решение, как показано ниже, что должно позволить загружать только .doc, .docx и файлы в формате .pdf:Проверка загрузки файла PHP finfo_file
$allowedExts = array(
"pdf",
"doc",
"docx"
);
$allowedMimeTypes = array(
'application/msword',
'application/pdf',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/x-pdf',
'application/vnd.pdf'
);
$extension = end(explode(".", $_FILES["fileinputFileName"]["name"]));
if (! (in_array($extension, $allowedExts))) {
//throw error
$hook->addError('fileinputFileName','Please ensure you select a PDF, DOC or DOCX file.');
return $hook->hasErrors();
}
if (in_array($_FILES["fileinputFileName"]["type"], $allowedMimeTypes))
{
// all OK - proceed
return true;
}
else
{
//throw error
$hook->addError('fileinputFileName','Please ensure you select a PDF, DOC or DOCX file.');
return $hook->hasErrors();
}
В противном случае код примера:
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (false === $ext = array_search(
$finfo->file($_FILES["fileinputFileName"]["tmp_name"]),
array(
'doc' => 'application/msword',
'pdf' => 'application/pdf',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'pdf' => 'application/x-pdf',
'pdf' => 'application/vnd.pdf'
),
// all OK - proceed
return true;
)) {
//die('Please provide another file type [E/3].');
$hook->addError('fileinputFileName','Please ensure you select a PDF, DOC or DOCX file.');
return $hook->hasErrors();
}
Спасибо Павла, - я думал, что мой код проверял тип Мима? – dubbs
Я считаю, что тип, отправленный здесь, не выводится из файла, а зависит от имени файла. –
ОК. Просто пошел на реализацию, но получил ошибку сервера. Код, который я использую, включен в обновленный вопрос выше. Есть идеи, в чем проблема? – dubbs