Разработчики библиотеки fingerprintjs, позволяющей генерировать идентификаторы браузера в пассивном режиме на основе косвенных признаков, таких как разрешение экрана, особенностей WebGL, списки установленных плагинов и шрифтов, представили новый метод идентификации, основанный на оценке установленных у пользователя типовых приложений и работающий через проверку поддержки в браузере дополнительных обработчиков протоколов. Код скрипта с реализацией метода опубликован под лицензий MIT.
Проверка осуществляется на основе анализа привязки обработчиков к 32 популярным приложениями. Например, определив наличие в браузере обработчиков схем URL telegram://, slack:// и skype:// можно сделать вывод о наличии в системе приложений telegram, slack и skype, и использовать данную информацию в качестве признака при генерации идентификатора системы. Так как список обработчиков одинаков для всех браузеров в системе идентификатор не меняется при смене браузера и может применяться в Chrome, Firefox, Safari, Brave, Yandex Browser, Edge и даже в Tor Browser.
Метод позволяет генерировать 32-битные идентификаторы, т.е. имеет смысл как дополнительный признак в сочетании с другими параметрами. Большим минусом также является заметность попытки идентификации для пользователя (за исключением Tor Browser) – при генерации идентификатора на предложенной демонстрационной странице в правом нижнем углу открывается небольшое, но явно заметное окно в котором достаточно долго перебираются обработчики.
Для определения наличия приложения скрипт пытается открыть во всплывающем окне ссылку, связанную с внешним обработчиком, после чего браузер выводит диалог с предложением открыть содержимое в связанном приложении, если проверяемое приложение присутствует, или выдаёт код ошибки, если приложения нет в системе. Через последовательный перебор типовых внешних обработчиков и анализ возвращения кода ошибки можно сделать вывод о наличии в системе проверяемых программ.
В Chrome 90 для Linux метод не сработал и браузер на все попытки проверки обработчика вывел типовой диалог подтверждение операции (в Chromе для Windows и macOS метод работает). В Firefox 88 для Linux, как в обычном режиме, так и в режиме инкогнито, скрипт определил наличие установленных дополнительных приложений из списка, а точность идентификации оценена в 99.87% (35 подобных совпадений из 26 тысяч проведённых тестов).
В запущенном на той же системе Tor Browser был сгенерирован идентификатор, совпадающий с тестом в Firefox. При этом из-за отключения в Tor Browser диалогов подтверждения использования внешних обработчиков проверочные запросы оказалось можно открывать в iframe, а не в popup-окне , что в отличие от Firеfox и Chrome сделало проверку незаметной для пользователя (для разделения ситуация наличия и отсутствия обработчиков использовалось то, что правила same-origin блокируют доступ к страницам с ошибкой и разрешают к страницам about:blank). Из-за защиты от флуда проверка в Tor Browser занимает заметно дольше времени (10 секунд на приложение), но из-за незаметности процесса для пользователя время генерации индентификатора не так важно как в других бразуерах.