Как Mac OS X может сохранить информацию об URL, с которого был загружен файл?

8

WRT эту тему Что мне делать с com.apple.quarantine? Я хочу знать, как OS X может узнать и сохранить эту информацию в поле @. Я не ищу способ отключить эту функцию, но для кода (или псевдокод, идея, что угодно) относительно реализации этой вещи. Заранее спасибо.

Раффаэле Ди Фацио
источник

Ответы:

6

Как упоминал Даниэль, браузер может хранить исходный URL (а также источник ссылки) загруженного файла в расширенном атрибуте com.apple.metadata:kMDItemWhereFroms.

Сначала Apple добавила это в Safari для Mac OS X 10.4, затем это было добавлено в Chrome / Chromium [выпуск 22289] , и существует невыполненный запрос на улучшение, чтобы добавить его в Firefox [ошибка 337051] .

Что касается фактического кода для реализации этого, посмотрите исправление Chromium .

mark4o
источник
Хорошая история :-) Однако, при использовании Safari я не вижу реферала (или, по крайней мере, не в новых загрузках, которые я пытался увидеть, пропустил ли я что-то). Может быть, все по-другому, если щелкнуть правой кнопкой мыши и загрузить, или когда загрузка начинается автоматически? (Например, некоторые браузеры также не отправляют реферер при открытии ссылок в новых окнах.)
Arjan
Ах, вы правы, mdlsпоказывает это для загрузок, которые начинаются автоматически. И Get Info от Finder показывает это в виде списка через запятую, который я не заметил!
Арджан
6

После загрузки любого файла, запуск xattr fileпокажет вам, что браузер сохранил в расширенных атрибутах:

xattr mydownload.gz
com.apple.metadata: kMDItemWhereFroms
com.apple.quarantine

Далее более подробная информация:

xattr -p com.apple.quarantine mydownload.gz 
0000; 4cee9d4b, Safari, 24064D6B-9854-46BC-AF73-5DE5F8042D0B | com.apple.Safari

xattr -p com.apple.metadata: kMDItemWhereFroms mydownload.gz 
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [и т. Д.]

... или в читаемом формате:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "HTTP: // некоторые-URL"
)

Вы также можете установить их (или любой другой атрибут):

xattr -w some-name some-value mydownload.gz

Следующее тоже работает, даже если это имеет разные результаты при выполнении вышеуказанных команд снова:

xattr -w com.apple.metadata: kMDItemWhereFroms http://example.com mydownload.gz

И для com.apple.quarantineатрибута, в соответствии с пониманием :

Обычно данные карантина состоят из набора из 4 значений, разделенных точкой с запятой (набора десятичных цифр неизвестного назначения - обычно 0000, непрозрачного идентификатора из 8 символов , имени приложения, создавшего файл на карантине, и UTI приложения. (Унифицированный идентификатор типа) с префиксом символа трубы)

Например, для двух разных файлов, загруженных с помощью Mozilla FireFox, это выглядит так:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

Используя Действия с папками Automator, вы можете запускать такие команды для новых файлов в определенной папке, если это то, что вам нужно.

Арьян
источник
4

Эта информация хранится в так называемых «расширенных атрибутах». У Джона Сиракузы есть отличная статья, в которой обсуждаются расширенные атрибуты, когда они были впервые представлены в OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Похоже, что больше нет справочной страницы для инструмента командной строки 'xattr', но 'xattr -h' должна отображать базовую справку.

API уровня POSIX / BSD доступен в /usr/include/sys/xattr.h, который определяет функции C, такие как getxattr (), setxattr (), removexattr (), listxattr () и их двоюродные братья на основе FILE. (Эти команды, в отличие от xattr (1), имеют справочные страницы).

NSGod
источник
3

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

Я только что загрузил zip-файл, используя wgetGoogle Chrome, Firefox и Safari, и, как и ожидалось, wgetзагрузка не имеет расширенных атрибутов, как у загрузок браузера, поскольку они знают об этой функции. Интересно, что Firefox установил карантин для загрузки, но забыл установить com.apple.metadata:kMDItemWhereFromsинформацию о том, где изначально находился загруженный файл (его URL). Safari и Chrome установлены оба, wgetни один.

Даниэль Бек
источник