LINUX.ORG.RU

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

 , ,


2

1

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

Ответ на: комментарий от 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)
Ответ на: комментарий от 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 ★★★★★
()