Как гарантировать, что значение отпечатка не было подделано в запросе со стороны клиента

Отпечаток пальца JS рассчитывается на стороне клиента с использованием такой библиотеки, как fingerprint2.

Мой вопрос: если я отправлю это значение через ajax, пользователь сможет подделать это значение с небольшим усилием и просто сделать поддельный почтовый запрос, который будет интерпретироваться серверным кодом как легальный.

Мой вопрос: если это может произойти, эту библиотеку можно легко обойти, даже не меняя никаких свойств в браузере (это изменит отпечаток браузера).

Моя интерпретация верна? Как я могу обеспечить целостность этой ценности?

3 ответа

Вы не можете, и я бы не стал беспокоиться об этом.

Правило № 1: Все входные данные, поступающие с компьютера пользователя, могут быть подделаны и на них нельзя полагаться на 100%.

Если вы хотите, вы можете удвоить отпечатки пальцев на сервере и использовать библиотеки в качестве детектора устройств piwik для сопоставления данных, но у вас бесполезная головная боль.

90% пользователей, посещающих вас, не будут иметь понятия о том, что вы делаете, и предоставят вам надежные данные. У них даже не будет рекламного блока. Они дадут вам надежные данные.

9% посетителей могут иметь блокировщик рекламы, который может блокировать или не блокировать эти запросы AJAX. Они хотят, чтобы вы уважали их конфиденциальность, делайте так, чтобы вы оставляли их как клиентов. 1% могут знать, что делают эти ajax-запросы, но они никогда не узнают, потому что они не могут потрудиться проверять консоль каждого веб-сайта, который они посещают. 1% из этого 1% может взглянуть на консоль браузера и выяснить отпечатки пальцев браузера.

1% от этого 1% от этого 1% украдут ваш код для снятия отпечатков пальцев. еще 1% из 1% из 1% попытаются подделать его только для лулзов, а затем забудут об этом.

Короче, не беспокойтесь. люди не будут беспокоить либо.

Но если вы действительно должны беспокоиться и причинять себе головную боль

  • сохраните идентификатор пользователя в своей базе данных на клиентском компьютере в виде файла cookie для отслеживания. Также сохраните его в хранилище сеансов, локальном хранилище, в любых движках баз данных, которые может предоставить браузер. (обратите внимание, что вы должны указать это в своем отказе от использования файлов cookie, почему вы храните данные на компьютере пользователя, когда европейские пользователи посещают ваш сайт)
  • используйте этот идентификатор пользователя для сопоставления отпечатков пальцев с пользователем. Обратите внимание, что этот идентификатор может быть удален в любое время любым механизмом очистки кэша (cccleaner, антивирусный сканер, пользователь нажимает на пустую историю и т. Д.)
  • поместите идентификатор пользователя в объект window.name. Пока вкладка открыта, она будет сохранена, и попытайтесь сбросить / сохранить ее на компьютере пользователя.
  • Добавьте E-TAG к вашим изображениям, компьютер пользователя попытается запросить это изображение с этим номером etag в следующий раз, когда он придет. Перехватите этот запрос (не позволяйте веб-серверу обрабатывать его, но обрабатывайте его в php/jsp/asp/ что угодно), чтобы вы могли идентифицировать пользователя. Установите переменную сеанса с правильным идентификатором пользователя и "ответьте", что изображение по-прежнему является действительным для этого значения etag, и верните с помощью cookie правильный идентификатор пользователя
  • поместите значения "timestamp" за запросом javascript на основе идентификатора пользователя и задайте срок действия запрашиваемой страницы, включая этот файл javascript, через 180 дней или около того. Каждый раз, когда пользователь возвращается и пользователь не очистил свою историю, он выполнит запрос javascript с заданным параметром "timestamp" get gotcha.js?time=1283737273873 используйте серверный сценарий снова, чтобы перехватить. Затем вы можете использовать ajax для обновления содержимого страницы.
  • добавить что-то вроде карт Google на своей странице. Если они используют gmail или какой-либо сервис Google и дали согласие Google на установку файлов cookie, Google выгрузит свой браузер, полный файлов cookie, которые могут сохраняться некоторое время. Файлы cookie карт Google остаются неизменными, по крайней мере, в течение сеанса работы в браузере, и их можно прочитать с помощью сценария javascript /serveride.
  • используйте детектор устройств piwik, чтобы создать отпечаток браузера на стороне сервера, используйте его, чтобы сузить догадки относительно того, каким пользователем он является.
  • закодируйте ваш запрос как байтовый буфер / поток, а base64 закодируйте его, чтобы угадать, что его сложнее, даже если base64 декодирует его и отправит запрос в двух частях, одна с проверочным хешем, а другая с отпечатком пальца. затем сопоставьте хеш и его содержимое, и, если оно совпадает, вы можете быть уверены, что, если оно подделано, кто-то приложил немало усилий.
  • минимизируйте и запутывайте ваш код, также на многих бесполезных переулках в вашем коде javascript. Поместите каждую строку в ее собственную функцию и объедините их в цепочку, чтобы сделать единое целое. приложите слишком много усилий, чтобы вычесть то, что там происходит.

Кроме того, я действительно могу рекомендовать вас: не беспокойтесь. это не стоит усилий. люди, которые хотят обойти, обойдутся. они отключают JavaScript, исключают этот сценарий, стирают все куки перед продолжением или уходом с сайта, меняют плагины зарегистрированных шрифтов и т. д. Не преследуйте тех, кто не хочет, чтобы за ними следили. Сосредоточьтесь на группе, которой все равно.

Как я могу обеспечить целостность этой ценности?

Чтобы ответить вам очень кратко, всякий раз, когда вы хотите защитить свою целостность, вы также должны предоставить дайджест отправленного сообщения.

Здесь я объясняю защиту целостности с использованием Алисы (FrontEnd), Боба (BackEnd) и Труди (злоумышленник)

Предположение:

Алиса хочет отправить пакет содержит PLAIN_TEXT (здесь ваш отпечаток) Бобу, а Труди - злонамеренный человек, который хочет перехватить пакет и изменить PLAIN_TEXT,


Угрозы против целостности:

Труди может захватить PLAIN_TEXT и измени его на то, что она хочет. (В действительности может быть больше угроз против целостности, но я хочу, чтобы история была короткой.)


Вот шаги, которые Алиса должна предпринять для защиты целостности пакета:

  1. Алиса получает дайджест PLAIN_TEXT (называется text_digest).
  2. Алиса прикрепляет дайджест к PLAIN_TEXTи получить новый package (packageзнак равноPLAIN_TEXT+text_digest)
  3. Алиса шифрует package
  4. Алиса получает дайджест зашифрованного пакета (whole_package_digest)
  5. Алиса присоединяет whole_package_digest в зашифрованный пакет, и отправьте его Бобу

Что Труди может сделать после намерения:

Вариант 1. Попробуйте сломать шифрование пакета

Вариант 2. Попробуйте опустить encrypted package и приложить ее собственный пакет.


На стороне Боба:

  1. Он расшифровывает packageи получает PLAIN_TEXT, (он следит за тем, чтобы Алиса отправила этот пакет, потому что ни у кого больше нет ключа)

  2. Он получает дайджест PLAIN_TEXT используя тот же метод (давайте назовем это obtained_digest), и он сравнивает obtained_digest с text_digestи если они равны, то это означает, что PLAIN_TEXT не манипулировать.

  3. В конце он получает дайджест полученной посылки и сравнивает его с whole_package_digest, Если они равны, это означает, что Труди потерпела неудачу с ее вторым вариантом.

Обратите внимание, что в приведенном выше сценарии целостность в значительной степени зависит от конфиденциальности. Но, вы можете использовать как симметричный, так и асимметричный метод для шифрования.

На изображении ниже я попытался объяснить то, что хотел сказать более четко:

введите описание изображения здесь

Проверка целостности отпечатка на стороне клиента невозможна... Лучше всего для вас использовать PHP для обнаружения внутренних систем... Я написал для этого библиотеку, но не опубликовал... Если вам это нужно, я могу отправить это вам...

Что делает эта библиотека, так это определяет Mac-адрес устройства... Поскольку две системы не могут иметь одинаковый Mac-адрес... Это очень хороший способ получить точный отпечаток пальца.

Другие вопросы по тегам