Member-515487 Ответов: 1

Как проверить исходный тип MIME файла


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

Как реализовать проверку заголовка файла для проверки того, что содержимое при загрузке будет интерпретироваться как изображение независимо от используемого приложения.

Что я уже пробовал:

Проверил MIMETYPE и заголовки в javascript

Richard MacCutchan

Вы никогда не можете гарантировать, что файл является правильным типом, даже после проверки его содержимого. Некоторые файлы содержат определенные идентификаторы заголовков, которые вы можете искать, но любой другой файл может содержать ту же последовательность. Примите, что пользователь (в основном) знает, что он делает, и оставьте все как есть.

F-ES Sitecore

Вы только что узнали, почему проверка javascript-это приятно, но проверка сервера обязательна.

Member-515487

Как можно закрыть этот дефект безопасности
я проверяю расширение на стороне клиента и на стороне сервера
есть ли другой способ сделать это

пользователь загружает файл после изменения расширения

1 Ответов

Рейтинг:
2

Jochen Arndt

Если должно поддерживаться только несколько типов файлов, таких как изображения, вы можете написать функцию проверки "волшебных байтов".

Такая функция обычно считывает фиксированное количество байтов из начала файла и ищет магические байты в определенных позициях типа файла.

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

Некоторые определения файлов изображений:

0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image data
0       string          GIF8            GIF image data
0       beshort         0xffd8          JPEG image data
0       string          MM\x00\x2a      TIFF image data, big-endian
0       string          II\x2a\x00      TIFF image data, little-endian

Формат довольно прост:
Первое значение-это смещение, второе-тип данных, а третье-данные (со строками в стиле C, где \xNN указывает шестнадцатеричный байт, а \NNN-восьмеричный байт).

Впрочем, эти проверки все равно могут провалиться.