Проверка MIME-типа PDF-файлов при загрузке в PHP - PullRequest
3 голосов
/ 28 июля 2010

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

Каков наилучший способ проверить тип mime в php?Я использую PHP 5.2.5 и не могу заставить работать fileinfo или mime_content_type ().

для fileinfo Я получаю следующее:

Warning: finfo_open() [function.finfo-open]: Failed to load magic database
at '(null)'. in [snipped filename]  on line 35

Ответы [ 4 ]

5 голосов
/ 28 июля 2010

MIME-типы не надежны для проверки типа файлов. Браузер клиента может сообщить об этом неправильно.

Проверка на Магическое число . Файлы PDF начинаются с "% PDF" (25 50 44 46).

1 голос
/ 28 июля 2010

Это, вероятно, означает, что переменная среды MAGIC не установлена, и ваш магический файл не находится в / usr / share / misc / magic.Либо установите значение MAGIC, чтобы оно указывало на правильный магический файл, либо передайте магический файл в качестве второго параметра конструктору finfo

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");

или

$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic"); 
1 голос
/ 28 июля 2010

Действительно, MIME-типы не лучший способ убедиться, что пользователь загрузил действительный файл, поскольку его легко подделать, если вы знаете, как.

Но когда файл публикуется, вывсегда можно проверить тип MIME следующим образом:

$Type = $_FILES['someFile']['type'];

Возможно, вы могли бы использовать класс php, чтобы определить, что это действительный PDF-файл, например FPDF (http://www.fpdf.org/)

Что ж, удачи в любом случае)

0 голосов
/ 28 июля 2010

Простой способ получить MIME-тип напрямую из $ _FILES. Если тип mime содержит слово «pdf», то вы можете считать его действительным PDF.

$contentType = $_FILES['myFile']['type'];
if(isValidPDF($contentType)) {
    die('It is a PDF');
} else {
    die('It is not a PDF');
}

function isValidPDF($mime) {
    return strpos($mime, 'pdf') !== false;
}
...