Ответ 1
Это называется отпечатком пальца браузера.
Отметьте https://browserleaks.com/ список тонны данных, которые вы можете получить о пользователе. Этот веб-сайт использует код на стороне клиента, который вы также можете использовать для получения всех данных, которые вы там видите, включая такие вещи, как:
- Какие шрифты они установили
- Какие ОС они используют
- их провайдер
- Какие плагины они установили
- Используя <canvas>
, уникальный уникальный отпечаток сам по себе
- Разрешение экрана
и многое, многое другое, особенно если у пользователя есть Flash, WebGL или WebRTC. Используя эти данные, вы создаете "отпечаток пальца" пользователя в своей базе данных. Например, скажем, я посещаю ваш сайт; вы записываете все 322 шрифта, которые я установил, какую ОС у меня, кто мой интернет-провайдер, какие плагины, которые я установил, разрешение экрана и т.д. Когда я пытаюсь перейти на ваш сайт из другого браузера и даже другого IP, вы все еще точно знаете, кто я из всех других данных, которые вы собрали.
EDIT: учитывая комментарий duskwuff и downvote, я думаю, что я вынужден дать некоторые ссылки на исследования и результаты. Обратите внимание, что отпечаток пальца браузера не на 100% эффективен, поэтому его нельзя использовать как уникальный идентификатор, как в базе данных, чтобы полностью идентифицировать пользователя, но с использованием новейших технологий вы можете получить очень высокие показатели успеха. Большинство веб-сайтов используют его как для рекламы, так и по своему усмотрению, для защиты от спама:
https://panopticlick.eff.org/static/browser-uniqueness.pdf (эффективность 99.1%) http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf (эффективность 99.24%) http://mickvaites.com/wp-content/uploads/2013/09/T802_Michael_Vaites_2013-BrowserFingerprinting.pdf (эффективность 95%)
ИЗМЕНИТЬ 2: Чтобы реализовать это без дорогостоящих корпоративных продуктов SaaS: https://www.npmjs.com/package/fingerprintjs2 В разделе "Список источников отпечатков пальцев" вы увидите список разных частей данных, которые вы получите, когда пользователь посещает ваш сайт. Вы должны записывать эти данные в свою базу данных в любое время, когда кто-то отправляет опрос. Прежде чем разрешить подачу опроса, запросите свою базу данных для чего-то вроде "имеет ли кто-нибудь с этим же агентом пользователя, язык, глубину цвета... и т.д., Подал опрос в прошлом? Если да, это, вероятно, кто-то пытается отправить опрос дважды, поэтому не допускайте подачи". Это очень упрощенный способ сделать это и не будет работать очень хорошо; в идеальном мире вам понадобится сложный алгоритм, который будет проверять все точки данных и определять вероятность того, что пользователь будет таким же, как раньше. Например. возможно, они изменили свой часовой пояс, чтобы избавиться от обнаружения спама; если все точки совпадают, за исключением часового пояса, что легко обнаружить.
Простой способ реализовать это на достойном уровне точности: использовать отпечаток пальца + установленные шрифты. Фиксация пальцев очень точная и трудно подделать. То же самое с установленными шрифтами. Эти две части данных позволят вам получить довольно приличную систему обнаружения спама. Пользователи могут отключить html-холст в своем браузере, поэтому вам необходимо остановить их от отправки опроса, если данные отпечатка пальца пустого. Пользователи могут удалять и добавлять шрифты довольно легко, поэтому только шрифты не идеальны, но комбинация этих двух остановит любые основные вредоносные попытки отправки опроса несколько раз.