LINUX.ORG.RU

Идентификация переживающая очистку печенек и истории

 , ,


2

1

Есть такое? Вот зашёл я на rtings, а у них счётчик, капиталюги-жадюги. 3 девайса посмотрел - потом плоти. Очистка данных спасает, пока что. Не хочу дожить до момента когда перестанет спасать, хочу сам такую гадость сделать. Есть идеи?

Есть такое?

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

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)

Фингерпринты есть. Но его тоже несложно поменять.

Используется всё, что можно добыть через JS: разрешение, таймзона, юзерагент, шрифты вроде. Обычно смена тупо таймзоны решает задачу (у меня вообще рандомная всегда стоит, расширением для фокса, ибо нефиг знать моё местоположение даже примерно). Там редко анализируется всё по отдельности, чаще всего просто берётся хэш от всего сразу, делающий тебя уникальным, и смена даже чего-то одного помогает его изменить. Но вообще самая дыра — это, конечно, шрифты.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от Dimez

А если канвас есть, то фингерпринтовая либа может вывести в него текст и прочитать отдельные пиксели, которые в зависимости от системы, браузера, установленных шрифтов и алгоритмов сглаживания могут отличаться.

static_lab ★★★★★
()
Ответ на: комментарий от greenman

Тоже не идеальное решение, потому что если раз 10 запросить цвет одного пикселя, вернётся разный результат. Это такой же фингерпринт, как и блокировка канваса, ибо далеко не все ставят подобные плагины.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Вообще-то этот аддон слегка модифицирует всякие там получающиеся размеры и цвета случйным образом. Канвас есть, просто он каждый раз при загрузке страницы выдаёт каждый раз разные результаты. На глаз вообще не заметно, а вот фингерпринтинг канвасом - фсё.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Вот и я об этом говорю. Просто создаём пустой канвас размером 1x1 и 10 раз считываем этот пиксель. Практически наверняка все 10 результатов не будут одинаковы, поскольку аддон подмешивает шум при каждом считывании. Это значит, что пользователь установил у себя специальный аддон. И это точно такая же «особая примета», как и отсутствие канваса из-за его блокировки — «особая примета».

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Просто создаём пустой канвас размером 1x1 и 10 раз считываем этот пиксель. Практически наверняка все 10 результатов не будут одинаковы,поскольку аддон подмешивает шум при каждом считывании.

Для каждой новой загрузки станицы - своя рандомная ошибка вносится. Она не меняется если 100500 раз скрипт запустить. Цвет твоего пикселя будет одним и тем же. Он изменится только когда страница будет перезагружена.

Так что нет, скриптом наличие CanvasBlocker не отследить. Фингерпринтинг будет выдеть совершенно обычный браузер с неким фингерпринтом. Только если страницу перезагрузить, это будет как бы другой запрос с другого браузера с совершенно другим фингерпринтом, постоянным для текущей загруженной страницы.

Единственный косяк - из-за дебилов пишущих браузеры всё ещё можно фингерпринтить по системным шрифтам, и это, к сожалению, аддоном не вылечить. Впрочем, если юзер не добавлял и не удалял системные шрифты, то уникальность такого фингерпринта будет крайне низка.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Я просто констатирую, что сомнительный ресурс: и неидентифицирующую девайс инфу приплел, и рассказывает басни про уникальность ширины моей мобилки.

t184256 ★★★★★
()
Ответ на: комментарий от Stanson

Для каждой новой загрузки станицы - своя рандомная ошибка вносится. Она не меняется если 100500 раз скрипт запустить. Цвет твоего пикселя будет одним и тем же. Он изменится только когда страница будет перезагружена.

Это не так. Я сам экспериментировал.

Но даже если бы было так, то можно считать несколько разных пикселей на пустом канвасе. Без аддона у них всех будет одинаковый цвет, а с аддоном — разный. Такие дела.

Нижеприведённый код по идее должен работать в обоих случаях:

const c = document.createElement('canvas');
c.width = 10;
c.height = 1;

const g = c.getContext('2d');
const d = g.getImageData(0, 0, 10, 1).data;

let s = 0;
for (let i = 0; i < 10 * 4; ++i) {
  s += d[i];
}

if (s === 0) {
  console.log('no addon');
} else {
  console.log('addon installed');
}
static_lab ★★★★★
()
Последнее исправление: static_lab (всего исправлений: 1)
Ответ на: комментарий от static_lab

Даже надёжнее так:

const c = document.createElement('canvas');
c.width = 10;
c.height = 1;

const g = c.getContext('2d');
g.fillStyle='#999';
g.fillRect(0, 0, 10, 1);

let s = 0;
for (let i = 0; i < 10 * 4; ++i) {
  s += g.getImageData(0, 0, 10, 1).data[i];
}

if (s === (153 * 3 + 255) * 10) {
  console.log('no addon');
} else {
  console.log('addon installed');
}

https://jsbin.com/suwubuviwe/edit?js,console

static_lab ★★★★★
()
Последнее исправление: static_lab (всего исправлений: 1)
Ответ на: комментарий от Stanson

Я проверял на Canvas Defender, который зашумляет вывод. Его легко задетектить данным способом.

А вот Canvas Blocker настолько туп, что просто не работает:

const W = 6;
const H = 8;

const c = document.createElement('canvas');
c.width = W;
c.height = H;
document.body.appendChild(c);

const g = c.getContext('2d');
g.fillStyle='#ccc';
g.fillRect(0, 0, W, H);
g.fillStyle='#000';
g.fillText('a', 0, 7);

console.log([...g.getImageData(0, 0, W, H).data]);

В консоль выводятся данные об отрисованных пикселях независимо от того, включен аддон или нет. Потому-то мой предыдущий скрипт ничего и не детектил — потому что аддон ничего не делал.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Вот ещё интересный вариант:

const W = 6;
const H = 7;

const c = document.createElement('canvas');
c.width = W;
c.height = H;

const g = c.getContext('2d');
g.fillStyle='#fff';
g.fillRect(0, 0, W, H);
g.fillStyle='#000';
g.fillText('a', 0, 6);

const d = [...g.getImageData(0, 0, W, H).data].filter((b, i) => i % 4 === 0).map(b => (b & 0xF).toString(16)).join('');
console.log(d);

Можно выполнить просто в консоли браузера. Обратите внимание, это не хеш, а просто младшие биты.

macOS 12.6.9
Firefox 117: cecd8f60a3bfb8652f36642fe2f22f5656d9f5df59
Chrome 117:  cecd8f60a3bfb8652f36642fe2f22f5656d9f5df59
Safari 16.6: c5a82ff97b3fb2dcdfb7dadf59f9cfe60e31f4af38

И да, Canvas Blocker здесь никак не противодействует считыванию пикселей.

static_lab ★★★★★
()