PHP: Каково происхождение индекса 'type' в $ _FILES? - PullRequest
3 голосов
/ 17 февраля 2011

Для проверки разрешенных типов пантомимы при загрузке файлов я обычно полагаюсь на расширение fileinfo, но так как это расширение или magic database не всегда доступны, хотя используя тип index, связанный с каждым файлом в суперглобальном $_FILES.

Итак, мой вопрос: откуда этот индекс? Я подозреваю, что это либо исходит из браузера (и если это так, то его можно подделать), либо, скорее всего, с веб-сервера (или PHP) - и если это так: это просто расширение для отображения типов MIME это настоящая вещь?

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Это MIME-тип файла, предоставляемый браузером через интерпретацию расширения файла.Так что вы правы, это может быть подделано клиентом.

1 голос
/ 17 февраля 2011

Определяется клиентом при создании запроса POST.Файлы могут присутствовать только с multipart / form-data body , которое выглядит так:

--BoUnDaRy02984
Content-Disposition: form-data; name="textfield1"
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Joe owes =80100.
 --BoUnDaRy02984
Content-Disposition: form-data; name="file2"; filename="C:\tmp\file.doc"
Content-Type: application/ms-word
Content-Transfer-Encoding: base64
Content-Length: 32

VGhpcyB3b3VsZCBiZSB0aGUgdGV4dAo=
 --BoUnDaRy02984

PHP не интерпретирует все возможные варианты multipart /, но обнаруживает загрузку файловналичием атрибута filename= и дословного использования поля Content-Type: для $ _FILES [*] [тип].

1 голос
/ 17 февраля 2011

Это не ответ на ваш вопрос, но @ BoldClock уже предоставил это.

Во-первых, я бы не использовал это для проверки ваших файлов, это не на 100% надежно, вместо этого ябудет сканировать файл на наличие Магического числа с использованием файловых функций и некоторых функций двоичного преобразования.

Может показаться сложным, но не таким уж сложным.

Каждый файл должен иметьнабор магических чисел, которые позволяют определять тип файла, читая первые 4/8/16 байтов данных.

Файлы PDF начинаются с "% PDF" (hex 25 50 44 46).

Вам также необходимо будет выполнить другие проверки, например: Microsoft Office PPT / DOC / XLS имеют одинаковый байт-код, поэтому вы также можете проверить расширение.

Сначала помни о безопасности.

...