Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумБраузеры и профили

Что браузер отдаёт сайту помимо адреса

nullbyte
nullbyte
Ветеран
сообщений 2680
с апр
15 марта, 14:02первое сообщение

Регулярно натыкаюсь на вопрос в духе «сменил адрес, почему меня всё равно узнают». Соберу в одном месте, что уходит на сайт кроме адреса, чтобы было куда отправлять спрашивающих.

Начну с очевидного, дальше добавляйте.

Заголовки запроса: User-Agent, Accept, Accept-Language, Accept-Encoding, плюс подсказки клиента sec-ch-ua, sec-ch-ua-platform. Через скрипт достаётся навскидку такое:

console.log(
  navigator.userAgent,
  navigator.languages,
  navigator.hardwareConcurrency,
  navigator.deviceMemory,
  navigator.platform,
  navigator.maxTouchPoints,
  screen.width + 'x' + screen.height,
  screen.availWidth + 'x' + screen.availHeight,
  screen.colorDepth,
  window.devicePixelRatio,
  Intl.DateTimeFormat().resolvedOptions().timeZone,
  new Date().getTimezoneOffset()
);

Каждое поле по отдельности не значит ничего. Вместе набор сужает круг до нескольких человек на миллион.

если не воспроизводится, значит не понял
hexdump
hexdump
Знаток
сообщений 940
с июн
22 августа, 17:19#2

Дополню по экрану, там интереснее, чем кажется. Кроме width и height отдаются availWidth и availHeight, а разница между парами выдаёт высоту панели задач и её положение. У человека с панелью сбоку availWidth меньше ширины экрана, и таких заметно меньше.

Плюс devicePixelRatio. Дробные значения вроде 1.25 и 1.5 живут на Windows с масштабом, на маке отношение ровное. Если в профиле стоит платформа мака, а отношение 1.25, это видно с первого запроса.

matchMedia тоже болтливый:

matchMedia('(prefers-color-scheme: dark)').matches
matchMedia('(prefers-reduced-motion: reduce)').matches
matchMedia('(hover: hover)').matches
matchMedia('(pointer: fine)').matches

Последние две пары должны биться с maxTouchPoints. Сенсорный ввод при курсоре fine бывает, обратное сочетание встречается редко.

cronjob
cronjob
Новичок
сообщений 205
с фев, второй сезон
1 января, 08:36#3

а hardwareConcurrency это же просто число ядер? его вообще подделывают

nullbyte
nullbyte
Ветеран
сообщений 2680
с апр
8 июня, 11:53#4
cronjob: его вообще подделывают

Число логических ядер, да. Подделывают, но с оглядкой: значение обязано биться с остальным набором. Восемь ядер при deviceMemory 0.5 вместе не встречаются. И ещё, часть библиотек читает его для размера пула воркеров, поэтому слишком маленькая цифра замедлит саму страницу.

если не воспроизводится, значит не понял
tabless
tabless
Участник
сообщений 800
с июл
15 ноября, 14:10#5

Ещё сюда: список установленных шрифтов, поведение canvas и WebGL, набор кодеков через canPlayType, состав расширений WebGL. И самая обидная мелочь, порядок ключей в объекте navigator: он отличается между сборками и правится редко.

nullbyte
nullbyte
Ветеран
сообщений 2680
с апр
22 апреля, 17:27#6

Собрал ответы в кучу: заголовки, поля navigator, метрики экрана, пояс, шрифты, графика, кодеки. Проверять всё это надо с той же машины и через тот же порт, каким работаешь, иначе замер ничего не стоит.

По каждому пункту заведём отдельную тему, тут места не хватит.

если не воспроизводится, значит не понял