Как браузер помогает товарищу майору
Знаете, когда я почти нечаянно обнаружил, читая прекрасную книгу Дмитрия Кетова «Внутреннее устройство Linux» (и это не реклама), что каждый скачанный нами файл из Интернета с легкой руки браузера оставляет в расширенных атрибутах файла (в inode файла, не в самом файле) как минимум полную ссылку на то откуда он был скачан, я пришел в легкое возбуждение и хотел тут же броситься спасать мир. Позже, немного изучив этот вопрос, почитав «коммиты» и «комменты», говорившие, что этой возможности, встроенной в ядро GNU/Linux, как минимум уже около 10 лет, что ею пользуется не только браузеры, но и, к примеру, популярная утилита wget (curl нет), и что эта вещь считается чуть ли не нормой в Linux (и, как выяснилось позже в MacOS), то я немного подуспокоился. Одно не давало мне покоя: поиск в google site:https://habr.com getfattr
, равно как и site:https://linux.org.ru getfattr
ничего об этом не говорил. «Значит — подумал я — эта тема еще широко у нас не обсуждалась». Что же, пришло время ее обсудить, но для начала немного поисследовать. И вот что я обнаружил:
Дисклеймер*. Из-за отсутсвия времени буду добавлять много букв по мере возможности. Пока только конкретика.
Да, каждый скачанный файл с помощью любого Chromium-совместимого браузера (проверено в lxc-контейнере на Chrome, Chromiun, Yandex и Opera) записывает в расширенные атрибуты файлы укромно спрятанные в файловую систему вот такой вывод:
i@ars:~$ getfattr -d logo.png
# file: logo.png
user.xdg.origin.url="https://habr.com/images/logo.png"
user.xdg.referrer.url="https://habr.com/images/logo.png"
При этом все они честно ничего не пишут, если вы скачиваете файл в режиме «инкогнито» / «private browsing»
Знали ли вы об этом? Если да, то хорошо. Если нет, то теперь будете знать. Что касается Firefox и Palemoon — эти парни честно игнорируют эту помощь товарищу майору. Весь букет программ для просмотра Интернет-страниц я не проверял, но думаю, все, что основано на Chromium делает это, остальные скорее нет.
Теперь о MacOS и Windows. В «макоси» данная функция также работает в Chrome:
iMac-Igor:~ [censored]$ xattr -l habr_logo.png
com.apple.metadata:kMDItemWhereFroms:
00000000 62 70 6C 69 73 74 30 30 A2 01 02 5F 10 20 68 74 |bplist00..._. ht|
00000010 74 70 73 3A 2F 2F 68 61 62 72 2E 63 6F 6D 2F 69 |tps://habr.com/i|
00000020 6D 61 67 65 73 2F 6C 6F 67 6F 2E 70 6E 67 5F 10 |mages/logo.png_.|
00000030 20 68 74 74 70 73 3A 2F 2F 68 61 62 72 2E 63 6F | https://habr.co|
00000040 6D 2F 69 6D 61 67 65 73 2F 6C 6F 67 6F 2E 70 6E |m/images/logo.pn|
00000050 67 08 0B 2E 00 00 00 00 00 00 01 01 00 00 00 00 |g...............|
00000060 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000070 00 00 00 51 |...Q|
00000074
com.apple.quarantine: 0001;5c8a21e7;Google Chrome;26D6C537-E6B0-4715-9E77-656FF1C5B7A9
… работает она и в Safari. В FF не проверял, но полагаяю, что прекраснодушный Firefox for MacOS также лишен этой «привилегии», как и в Linux.
Утверждается, что это используется для определения файла «скаченного из Интернет» и именно по наличию этого атрибута в «макоси» выскакивает предупреждение об опасности запуска и т.п. Хм… Странно… Но здесь мы плавно перейдем к Windows.
«Венда» вещь безусловно бездарная и следящая за всеми с неприкрытым цинизмом. (чего только стоят неотключаемые обновления в W10!). В ней, в NTFS также спрятаны лазейки для записывания чего угодно в расширенные атрибуты файлов. Называются они streams и могут все тоже самое. Говорят, что в эти поля очень любят вирусы, поскольку все остальные программы их используют редко. Не могу ничего сказать, я этим последние 10 лет не пользуюсь. И все же. При первом приближении в Win10 я не обнаружил подобной «мелочи», а именно того факта, чтобы в расширенный атрибуты NTFS Google Chrome писал ссылки подобно тому, как он делает это в Linux и MacOS. Оговорюсь: это при первом приближении, поскольку утверждается, что у streams есть как-бы несколько слоев и не все они прямо доступны.
Вот так, если кратко обстоит дело с тем, как устроены не только браузеры, но и файловые системы при предельно кратком приближении.
Я еще буду править эту статью. Но заранее прошу отказаться от комментариев в виде: «Ну и что, мне нечего скрывать». В общем, нам всем как-правило тоже, но наиболее рьяным «намнечего» я могу вместо комметариев посоветовать включить встроенную камеру и микрофон, и дать публичную ссылку здесь в комментариях чтобы и мы все могли в этом убедиться. Шутка конечно.
Вот такие шуточки.