Для идентификации пользователя (устройства на котором он работает) давно придуманы cookies. Механизм определения пользователя/браузера по cookies в последнее время стал ненадежным (режим инкогнито, можно сбросить и пр.).
Появились EverCookies или ZombieCookie, которые пытаются сохраниться в большом количестве мест и обычному пользователю уже непросто их вычистить, если, конечно, он не работает в режими инкогнито. В нем ничего на диск не сохраняется, поэтому EverCookies работать не будут.
Чтобы идентификация браузера пользователя работала и без cookies появились технологии построения цифровых отпечатков (fingerprint). Наиболее широко используемые Canvas fingerprint и WebGL fingerprint. Пожалуй, самая популярная библиотека для получения цифрового отпечатка — FingerprintJS2, написанная нашим соотечественником Валентином Васильевым: https://github.com/Valve/fingerprintjs2. Обнвления сделаны несколько месяцев назад, так что разработка активна. Подробно о технологиях идентификации он рассказывает здесь.
Другая распространенная библиотека — ClientJS: https://clientjs.org/ В ней также используется Canvas Fingerprint, но, похоже, нет WebGL fingerpring. Либа не обновлялась 2 года, видимо автор забросил проект.
Отдельно скрипт для WebGL fingerprint есть здесь: https://codepen.io/jon/pen/LLPKbz. Хэш полученный с помощью этой либы совпадает с результатами https://browserleaks.com/webgl.
Есть скрипт для расчета Canvas Fingerprint: https://github.com/kmowery/canvas-fingerprinting.
Самый серьезный сервис для расчета fingerpring — https://www.augur.io/ Он с некоторых пор перестал быть open-source и мне не удалось найти сырцы, когда он был opensource. Сейчас это «облачный» сервис на котором мне не удалось пройти регистрацию, чтобы получить демо доступ. Ну и, посокльку, сервис облачный — он не годится для проектов, где нужен максимально быстрый отклик.
Есть некоторый проект https://amiunique.org для проверки насколько браузер анонимный https://github.com/DIVERSIFY-project/amiunique. Там также используются куски кода для получения fingerprint, но, судя по всему, они взяты с FingerprintJS2.
Cерьезный сервис для тестирования анонимности — https://panopticlick.eff.org/. Собственно, исследование Electronic Frontier Foundation и данный сервис и привели к тому, что появились технологии для расчета fingerprint, поскольку они доказали на практике, что браузер можно уникально идентифицировать в ~94% случаев. К сожалению, сырцы для расчета fingerprint они не открывают. Возможно, используются какие-то из указанных библиотек.
Уже упоминал проект https://browserleaks.com/ в котором используются различные способы идентификации браузера. Судя по всему там также используется код FingerPrintJS2.
Интересное описание по Device Fingerprint: http://www.darkwavetech.com/index.php/device-fingerprint-blog/?disp=posts.
Любопытная статья с общим обзором и ссылками на различные системы формирования отпечатка.
https://pixelprivacy.com/resources/browser-fingerprinting/
Полезные ссылки:
- https://privacy.net/analyzer/ — анализатор приватности браузера