Проверка файла - это то, что он утверждает, что это его расширение файла - PullRequest
3 голосов
/ 03 февраля 2011

Есть ли способ проверить файл в соответствии с его расширением?

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

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

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

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

Я посмотрел на NSFileManager attributeOfItems:atPath:, но, похоже, это не так.предложить любую информацию для реального типа файла.Тип файла возвращает только тип каталога, символьной ссылки и т. Д.

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

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

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

Ответы [ 3 ]

3 голосов
/ 03 февраля 2011

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

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

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

0 голосов
/ 03 февраля 2011

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

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

...