У меня был этот вопрос некоторое время: как именно определяется тип файла MIME? Я полагаю, что это делается путем проверки, содержат ли определенные байты файла какие-либо из известных магических чисел / сигнатур файлов , верно?
Если это так, то возникает другой вопрос. Допустим, я загружаю скрипт bash с поддельной подписью GIF-файла на веб-сайт, который позволяет загружать только изображения, что произойдет? Или:
- процедура обнаружения MIME-типов достаточно умна, чтобы обнаружить поддельные подписи, или
image/gif
ошибочно возвращается как mimetype, и загрузка может продолжаться
У меня нет банкомата с установленным HEX-редактором, и я не люблю делать выводы, связанные с безопасностью, из тестов, поскольку я могу что-то упустить (или неверно истолковать), поэтому мой вопрос: какой из приведенных выше вариантов исправить?
Кроме того, существуют ли другие лучшие практики (помимо проверки mimetype), чтобы гарантировать, что любой данный файл действительно является тем, чем он кажется / должен (или разрешен) быть? Заранее спасибо.
PS: Просто для ясности, я не спрашиваю об индексе type
в суперглобальном $_FILES
.