Как с помощью JavaScript можно определить, что браузер пытается подменить параметры устройства? Не обязательно обнаружить реальные значение, а просто факт подмены.
Есть антидетект-браузеры, которые подменяют различные параметры, отправляя сайту отличные от фактического, значения, если сайт запрашивает их с помощью Javascript либо HTTP-заголовков:
- Screen Resolution
- Набор шрифтов
- Основной язык и список поддерживаемых языков
- Часовой пояс
- Количество ядер процессора
- Объем оперативной памяти
- Название видеокарты
- Количество медиа девайсов (камера, микрофон, наушники)
- Формат даты на устройстве
- Speech Voices
- Поддерживаемые аудио форматы
- Canvas Fingerprint
- WebGL Fingerprint
- Audio Fingerprint
- DOMRect Fingerprint
Какие есть способы определить факт подмены?
В одной из статей нашёл информацию, что браузер может производить подмену разными способами:
Привожу цитату:
```
"переписать эти функции в исходном коде браузера, до его компиляции. Это самый надежный и самый сложно определяемый способ.
- заинжектиться в работающий процесс вкладки и перехватывать обращения к нужным функциям в реальном времени. Технически сложно, т.к. смещения и адреса функций плывут с каждым обновлением браузера.
- перезаписать нужные нам значения прямо на странице через javascript же, после инициализации страницы, которую мы просматриваем. Самый простой в реализации, но самый отвратительный способ, т.к. сделать это незаметно действительно сложно. Как я покажу дальше, почти все антидетект-браузеры выбрали этот путь, чем подставили своих пользователей."
```
Вопрос, можно ли проверить, какой способ подмены используется в браузере.
И какие именно методы определения подмен существуют? Например, в статье было указано про Object.keys(Object.getOwnPropertyDescriptors(navigator)) для неумелого переопределения свойств Navigator.
Также можно обнаружить использование эмулированной среды, эта информация тоже была в статьях.
Вопрос, можно ли связать несколько профилей браузера с одним устройством? Идея в том, что каждая запущенная на компьютере программа использует определенные локальные порты. И можно определить, какие порты сейчас используются на устройстве, а какие порты закрыты вообще. Можно ли этот набор используемых / закрытых портов можно использовать для идентификации устройства, как уникальный отпечаток устройства, наподобие Canvas Fingerprint или набора установленных шрифтов?
Или возможности определения статуса портов ограничены, и например, сайт не может использовать эту информацию для точной идентификации пользователя?
Не могу разобраться с настройкой Cloud CDN. Для его работы нужно использовать Балансировщик нагрузки. Есть внешний сервер с веб-страницами. Делаю строго по инструкции "Setting up Cloud CDN with an external origin" https://cloud[dot]google[dot]com/cdn/doc[dot][dot][dot]-external-origin
Инструкция на этом заканчивает. И дальше не понимаю, что с этим делать.
Насколько я понимаю логику балансировщика, это должно работать так:
1. Google прикрепил ip к балансировщику. Если использовать его напрямую, он будет перенаправлять на указанную конечную точку (в моём случае домен asdfgtyu10.xyz).
2. Нужно как-то связать выданный ip с доменом asdfgtyu10.xyz. Инструкцию не нашёл. В основной инструкции об этом нет указаний. Натолкнул на мысль о домене вопрос, найденный в интернете https://switch-case[dot]ru/71632449
Как привязать выданный IP к домену, который указан в группе конечных точек (asdfgtyu10.xyz) - не понимаю. По логике, насколько я понял, балансировщик должен работать на том же домене. Но если я укажу A-запись для домена, как балансировщик поймет на какой сервер отправлять трафик, если в конечной точке указан домен, а не IP сервера? То есть балансировщик будет указывать сам на себя. Если же укажу в качестве конечной точки IP-сервера, и в А-записи пропишу IP балансировщика, то на стороне Google не будет связи с конкретным доменом, потому что он не будет нигде указан. И у меня к серверу с 1 IP-адресом подключено несколько доменов. Куда балансировщик в итоге будет направлять трафик?
Перепробовал все варианты. Сейчас в A-записи домена указан IP балансировщика с протоколом HTTPS (34.120.190.159), в группе конечных точек в качестве конечной точки сети указан IP моего внешнего сервера 165.22.64.183 с портом 443. Идей не осталось.
Подскажите, пожалуйста, как правильно настроить Cloud CDN, используя Балансировщик нагрузки и внешний сервер?
Развернул дистрибув CloudFront. Настроил, указал в качестве origin внешний сервер по домену asdfgtyu2.xyz.
Но при переходе по амазоновской ссылке d1bm861velymm0.cloudfront.net с конкретным путём выдает ошибку 502.
Насколько понимаю, CloudFront работает по такому же принципу, как и Azure CDN. Какой путь указываю в ссылке, по такому же пути проходит CDN на сервере-источнике и забирает файлы. По крайней мере, в Azure всё так и работало. То есть не обязательно привязывать свой домен, можно использовать поддомен AWS, в моём случае d1bm861velymm0.
В справке AWS есть статья по такой ошибке https://docs[dot]aws[dot]amazon[dot]com/Amaz[dot][dot][dot]bad-gateway[dot]html
Но не нашёл ничего, что бы объясняло проблему. С SSL вроде всё в порядке, используется Let's Encsrypt, в Azure не было с этим проблем. Ссылки не открываются и без https. С DNS проблем тоже нет. Порты стандартные.
Подскажите, пожалуйста, как сделать, чтобы всё заработало.
Есть вопрос по поводу базы данных Maxmind. Возможно есть умельцы, которые смогут подсказать, как решить эту задачу.
Нужно загрузить гео-базы Maxmind в Keitaro TDS, для этого необходим файл в формате DAT, который нужно загрузить в определенную директорию на хостинге.
Файл DAT представляет из себя закодированную информацию в таком виде http://joxi[dot]ru/52aYe7qC4noLl2
У меня есть есть все данные из баз Maxmind: ISP, City, Country, Connection Type. Но они в формате SQL.
Выглядит это следующим образом:
Для каждой базы (Country, City, ISP, Connection Type) есть отдельный sql-файл в котором прописано ID и название. Пример по City: http://joxi[dot]ru/Vrwle4ghOzEp9m
Есть один sql-файл, который объединяет все остальные.
В каждой строке прописан диапозон IP-адресов и все остальные данные.
В таком виде: (Id, start IP, end IP, ISP, Country, City, Connection type), пример строки:
(193036, 1000000000, 1000000255, 55456, 2, 1, 1)
Возможно преобразовать данные из sql-файлов в отдельные dat файлы по каждой базе и установить в Keitaro?
Технический специалист поддержки сказал, что это невозможно, так как у Maxmind свой бинарный формат, они не дают инструментов компиляции таких баз. Но возможно есть какие-то обходные пути.
Если вы можете реализовать такое, напишите мне в личные сообщения или оставьте свои контакты в теме.
Буду благодарен любому конструктивному комментарию.
Подскажите, пожалуйста, как можно отследить, какую информацию о сайте запрашивает посетитель сайта?
Ситуация следующая: нужно узнать, какую информацию о сайте/домене/сервере узнает пользователь, заходя на сайт. Как я понимаю, часть информации сайт всегда передает пользователю при посещении страницы. Часть информации можно узнать, не заходя на сайт через специальные сервисы. Например, информацию про домен. Есть какая-то информация, которую пользователь должен запросить отдельно или совершить определенные действия на сайте, и это можно зафиксировать?
Приведу пример. Есть сервисы, которые определяют количество страниц на сайте. В Яндекс метрике можно посмотреть глубину просмотра страницы, таким образом поняв, что пользователь просматривал много страниц.