Я создаю аналитический инструмент, и в настоящее время я могу получить IP-адрес пользователя, браузер и операционную систему от его пользовательского агента.
Мне интересно, есть ли возможность обнаружить того же пользователя без использования файлов cookie или локального хранилища? Я не жду здесь примеров кода; просто подсказка, где искать дальше.
Забыл упомянуть, что он должен быть кросс-браузерным, если это тот же компьютер / устройство. В основном я после распознавания устройства не очень пользователь.
javascript
php
http-headers
fingerprinting
slash197
источник
источник
Ответы:
Введение
Если я правильно вас понял, вам нужно идентифицировать пользователя, для которого у вас нет уникального идентификатора, поэтому вы хотите выяснить, кто они, сопоставив случайные данные. Вы не можете надежно сохранить личность пользователя, потому что:
Java-апплет или Com-объект был бы простым решением, использующим хэш аппаратной информации, но в наши дни люди настолько осведомлены о безопасности, что было бы трудно заставить людей устанавливать такие программы в их систему. Это оставляет вас зацикленными на использовании файлов cookie и других подобных инструментов.
Файлы cookie и другие подобные инструменты
Вы можете подумать о создании профиля данных, а затем использовать вероятностные тесты для определения вероятного пользователя . Профиль, полезный для этого, может быть создан с помощью некоторой комбинации следующего:
Элементы, которые я перечислил, - это, конечно, лишь несколько возможных способов уникальной идентификации пользователя. Есть много других.
Что дальше с этим набором элементов случайных данных для построения профиля данных?
Следующим шагом является разработка нечеткой логики или, что еще лучше, искусственной нейронной сети (которая использует нечеткую логику). В любом случае идея состоит в том, чтобы обучить вашу систему, а затем объединить ее с байесовским умозаключением, чтобы повысить точность ваших результатов.
Библиотека NeuralMesh для PHP позволяет создавать искусственные нейронные сети. Чтобы реализовать байесовский вывод, проверьте следующие ссылки:
В этот момент вы можете подумать:
Зачем так много математики и логики для, казалось бы, простой задачи?
В основном потому, что это непростая задача . То, что вы пытаетесь достичь, на самом деле, это Чистая Вероятность . Например, с учетом следующих известных пользователей:
Когда вы получите следующие данные:
Вопрос, который вы по сути задаете:
Какова вероятность того, что полученные данные (B + C + E + G + F + K) на самом деле являются User1 или User2? И какой из этих двух матчей наиболее вероятен?
Чтобы эффективно ответить на этот вопрос, вам необходимо понять формат частоты и вероятности и почему совместная вероятность может быть лучшим подходом. Подробностей здесь слишком много (поэтому я даю вам ссылки), но хорошим примером может служить приложение-мастер медицинской диагностики , которое использует комбинацию симптомов для выявления возможных заболеваний.
Подумайте на мгновение о серии точек данных, которые составляют ваш профиль данных (B + C + E + G + F + K в приведенном выше примере), как о симптомах , а неизвестных пользователей - как о заболеваниях . Выявив болезнь, вы можете дополнительно определить подходящее лечение (рассматривать этого пользователя как User1).
Очевидно, что болезнь, для которой мы выявили более 1 симптома , легче идентифицировать. На самом деле, чем больше симптомов мы можем определить, тем легче и точнее будет наш диагноз.
Есть ли другие альтернативы?
Конечно. В качестве альтернативы вы можете создать свой собственный простой алгоритм оценки и основывать его на точных совпадениях. Это не так эффективно, как вероятность, но может быть проще для вас.
В качестве примера рассмотрим эту простую таблицу оценок:
Для каждого фрагмента информации, который вы можете собрать по данному запросу, присвойте соответствующий балл, а затем используйте « Важность» для разрешения конфликтов, когда оценки совпадают.
Доказательство концепции
Для простого подтверждения концепции взгляните на Perceptron . Персептрон - это модель РНК, которая обычно используется в приложениях для распознавания образов. Существует даже старый класс PHP, который отлично его реализует, но вам, вероятно, придется изменить его для своих целей.
Несмотря на то, что Perceptron является отличным инструментом, он все же может возвращать несколько результатов (возможных совпадений), поэтому использование сравнения Score and Difference по-прежнему полезно для определения лучших из этих совпадений.
Предположения
ожидание
Код для подтверждения концепции
Вывод:
Принт_р «Д»:
Если Debug = true, вы сможете увидеть ввод (датчик и желаемый), начальный вес, вывод (датчик, сумма, сеть), ошибку, исправление и окончательный вес .
от х1 до х20 представляют функции, преобразованные кодом.
Вот онлайн-демонстрация
Используемый класс:
Модифицированный класс перцептрона
Вывод
Идентификация пользователя без уникального идентификатора не является простой или простой задачей. это зависит от сбора достаточного количества случайных данных, которые вы можете получить от пользователя различными способами.
Даже если вы решите не использовать искусственную нейронную сеть, я предлагаю по крайней мере использовать простую матрицу вероятностей с приоритетами и вероятностями - и я надеюсь, что приведенный выше код и примеры дадут вам достаточно, чтобы продолжить.
источник
Implement Bayesian inference using PHP
, все 3 части. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Этот метод (обнаружение одних и тех же пользователей без файлов cookie или даже без IP-адреса) называется снятием отпечатков пальцев браузера . В основном вы сканируете как можно больше информации о браузере - лучших результатов можно достичь с помощью javascript, flash или java (например, установленных расширений, шрифтов и т. Д.). После этого вы можете сохранить хешированные результаты, если хотите.
Это не безошибочно, но:
Больше информации:
источник
Вышеупомянутые отпечатки пальцев работают, но все еще могут страдать от коллизий.
Одним из способов является добавление UID к URL-адресу каждого взаимодействия с пользователем.
http://someplace.com/12899823/user/profile
Где каждая ссылка на сайте адаптирована с этим модификатором. Это похоже на то, как ASP.Net работал, используя данные FORM между страницами.
источник
Вы смотрели в Evercookie ? Он может работать или не работать в разных браузерах. Выдержка с их сайта.
«Если пользователь получает Cookies в одном браузере и переключается на другой браузер, если у него все еще есть файл cookie Local Shared Object, он будет воспроизводиться в обоих браузерах».
источник
Вы можете сделать это с кэшированным png, это было бы несколько ненадежно (разные браузеры ведут себя по-разному, и он потерпит неудачу, если пользователь очистит свой кеш), но это вариант.
1: настроить базу данных, в которой уникальный идентификатор пользователя хранится в виде шестнадцатеричной строки
2: создайте файл genUser.php (или любой другой язык), который генерирует идентификатор пользователя, сохраняет его в БД, а затем создает .png истинного цвета из значений этой шестнадцатеричной строки (каждый пиксель будет 4 байта) и вернуть что в браузер. Обязательно установите заголовки content-type и cache.
3: в HTML или JS создайте изображение вроде
<img id='user_id' src='genUser.php' />
4: нарисуйте это изображение на холсте
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: прочтите байты этого изображения, используя
ctx.getImageData
, и преобразовать целые числа в шестнадцатеричную строку.6: Это ваш уникальный идентификатор пользователя, который теперь кэшируется на компьютере пользователя.
источник
I'm after device recognition
это раздача за то, что он хочет, и он уточняет здесь: stackoverflow.com/questions/15966812/…Исходя из того, что вы сказали:
Лучший способ сделать это - отправить MAC-адрес, который является идентификатором NIC.
Вы можете взглянуть на этот пост: Как я могу получить MAC и IP-адрес подключенного клиента в PHP?
источник
Вы можете сделать это с помощью etags. Хотя я не уверен, было ли это законным, поскольку была подана куча судебных исков.
Если вы правильно предупредите своих пользователей или у вас есть что-то вроде веб-сайта интрасети, это может быть нормально.
источник
Вы потенциально можете создать большой двоичный объект для хранения идентификатора устройства ...
Обратной стороной является то, что пользователю необходимо загрузить большой двоичный объект ( вы можете принудительно загрузить его ), поскольку браузер не может получить доступ к файловой системе для непосредственного сохранения файла.
ссылка:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
источник
Неэффективным, но может дать желаемый результат, будет опросить API на вашей стороне. Иметь фоновый процесс на стороне клиента, который отправляет пользовательские данные с интервалом. Вам потребуется идентификатор пользователя для отправки на ваш API. После этого вы можете отправить любую информацию, связанную с этим уникальным идентификатором.
Это устраняет необходимость в куки и локальном хранилище.
источник
Не могу поверить, http://browserspy.dk до сих пор здесь не упоминалось! На сайте описаны многие функции (с точки зрения распознавания образов), которые можно использовать для построения классификатора.
И, конечно же , для оценки функций я бы предложил поддержку векторных машин и, в частности, libsvm .
источник
Отслеживать их во время сеанса или между сеансами?
Если ваш сайт HTTPS Everywhere, вы можете использовать идентификатор сеанса TLS для отслеживания сеанса пользователя.
источник
это потребует от пользователя добровольной установки идентификатора.
после установки плагина отпечаток любого браузера (с включенным плагином) будет содержать этот конкретный плагин. Чтобы вернуть информацию на сервер, необходим алгоритм эффективного обнаружения плагина на стороне клиента, в противном случае пользователям IE и Firefox> = 28 потребуется таблица возможных допустимых идентификаторов.
Это требует относительно больших инвестиций в технологию, которая, вероятно, будет отключена поставщиками браузеров. Когда вы можете убедить своих пользователей установить плагин, также могут быть варианты, такие как установка локального прокси. , использование vpn или исправление сетевых драйверов.
Пользователи, которые не хотят, чтобы их идентифицировали (или их машины), всегда найдут способ предотвратить это.
источник
this will require the user to willingly install the identifier.
это, вероятно, не то, что имел в виду оригинальный постер (ОП).