Проверка файла - это то, что он утверждает, что его расширение файла
Есть ли способ проверить файл, который он утверждает, согласно его расширению файла?
У меня есть большое количество файлов, которые мое приложение копирует на удаленный сервер. Перед выполнением каждой копии файла я хотел бы проверить, что файл на самом деле соответствует расширению файла.
Прямо сейчас пользователь выбирает файлы и / или каталоги файлов, используя NSOpenPanel
, Когда у меня есть массив файлов, я могу проверить, существует ли каждый из них физически до начала копирования. У меня есть подтверждение того, что исходный каталог доступен для записи, работает нормально, а копия с помощью FSCopyObjectAsync
со всеми отменами файлов на месте тоже работает нормально.
Последний кусок это проверка проверки. Мои пользователи ограничены в том, что они могут загружать, но фильтр выполняется с использованием расширения файла. Злоумышленник может, например, взять файл текстового документа (.doc по расширению файла) и изменить его на.png, чтобы он прошел первоначальную проверку открытого диалогового окна.
Это довольно упрощенный пример. Файлы используются сервером, и я просто хочу убедиться, что файлы, которые не будут работать, не будут загружены.
я смотрел на NSFileManager
attributeOfItems:atPath:
, но он не предлагает никакой информации для реального типа файла. Тип файла возвращает только тип каталога, символическую ссылку и т. Д.
Я бы предпочел не пытаться открыть и загрузить каждый файл для проверки, просто прочитайте заголовок файла и убедитесь, что он соответствует спецификациям типа файла, которые ему необходимы.
Это не приложение для iOS.
Любая помощь или указатели в правильном направлении очень ценятся.
3 ответа
В основном нет. Файловая система знает только несколько очень ограниченных вещей о файле. Дополнительные метаданные могут быть связаны, но во многих случаях их не будет, и в любом случае метаданные могут лгать. Если вы хотите быть уверены, что файл действительно содержит то, на что он претендует, вам нужно открыть его и посмотреть.
В зависимости от типа файла и уровня доверия, вам может не потребоваться смотреть на все это. Например, файл может иметь магическое число в своих первых байтах, или может быть другая информация заголовка, которой достаточно, чтобы убедить вас. Но их наличие не гарантирует, что файл будет "работать".
Вы можете попробовать запустить /usr/bin/file --mime
на нем, чтобы получить тип MIME.