Проверка файла - это то, что он утверждает, что его расширение файла

Есть ли способ проверить файл, который он утверждает, согласно его расширению файла?

У меня есть большое количество файлов, которые мое приложение копирует на удаленный сервер. Перед выполнением каждой копии файла я хотел бы проверить, что файл на самом деле соответствует расширению файла.

Прямо сейчас пользователь выбирает файлы и / или каталоги файлов, используя NSOpenPanel, Когда у меня есть массив файлов, я могу проверить, существует ли каждый из них физически до начала копирования. У меня есть подтверждение того, что исходный каталог доступен для записи, работает нормально, а копия с помощью FSCopyObjectAsync со всеми отменами файлов на месте тоже работает нормально.

Последний кусок это проверка проверки. Мои пользователи ограничены в том, что они могут загружать, но фильтр выполняется с использованием расширения файла. Злоумышленник может, например, взять файл текстового документа (.doc по расширению файла) и изменить его на.png, чтобы он прошел первоначальную проверку открытого диалогового окна.

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

я смотрел на NSFileManagerattributeOfItems:atPath:, но он не предлагает никакой информации для реального типа файла. Тип файла возвращает только тип каталога, символическую ссылку и т. Д.

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

Это не приложение для iOS.

Любая помощь или указатели в правильном направлении очень ценятся.

3 ответа

Решение

В основном нет. Файловая система знает только несколько очень ограниченных вещей о файле. Дополнительные метаданные могут быть связаны, но во многих случаях их не будет, и в любом случае метаданные могут лгать. Если вы хотите быть уверены, что файл действительно содержит то, на что он претендует, вам нужно открыть его и посмотреть.

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

Вы можете использовать libmagic или MagicKit, оболочку Objective-C для libmagic. MagicKit может возвращать UTI или MIME-тип данного файла.

Вы можете попробовать запустить /usr/bin/file --mime на нем, чтобы получить тип MIME.

Другие вопросы по тегам