Я посвятил почти два десятилетия борьбе за цифровую конфиденциальность — от банкротства компаний, занимающихся шпионским ПО, до подачи уголовных жалоб на корпорации, которые считали себя выше закона. За все это время мне стало совершенно ясно одно: браузер, который вы используете прямо сейчас, почти наверняка вас подводит.

Это не учебник и не научная статья. Это всеобъемлющее, технически точное и полезное с точки зрения криминалистики справочное руководство, охватывающее все известные уязвимости конфиденциальности на стороне клиента в Google Chrome, и, что более важно, как обнаружить каждую из них с помощью расширения Chrome, созданного с использованием Manifest V3 и установленного в режиме разработчика с полными правами доступа, включая API отладчика.

Я пишу это, потому что верю, что знание — это первый шаг к свободе. Если мы не понимаем, как за нами следят, нас оценивают и эксплуатируют, то у нас нет надежды это остановить. Так давайте же начнём.

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


Часть 1: Идентификация браузера по отпечаткам пальцев — они знают ваш компьютер лучше, чем вы сами.

В Chrome прямо сейчас, пока вы это читаете, работает как минимум тридцать различных методов идентификации по отпечаткам пальцев. Не теоретические атаки из научных статей, которые могут работать в лабораторных условиях, а реальные, применяемые на миллионах веб-сайтов методы, позволяющие идентифицировать и отслеживать вас без вашего ведома или согласия [1][2].

Chrome практически не имеет встроенных средств защиты от снятия отпечатков пальцев. Повторю ещё раз, потому что это важно — браузер Google, самый популярный браузер в мире, по сути, ничего не делает для предотвращения создания веб-сайтами уникального профиля вашего устройства. Brave имеет функцию снятия отпечатков пальцев [3]. Firefox имеет privacy.resistFingerprinting[4]. Chrome не имеет ничего. «Песочница конфиденциальности» Google была закрыта в апреле 2025 года, так и не получив ни одного средства защиты от снятия отпечатков пальцев [5][6]. Предложение о бюджете конфиденциальности, которое ограничивало бы общее количество энтропии, которое сайт мог бы собирать за одно посещение, было полностью отменено [7].

Поэтому задача ложится на нас — на разработчиков расширений, на исследователей, на тех из нас, кто отказывается смириться с тем, что так уж устроен мир.

Как расширение Manifest V3 перехватывает процесс снятия отпечатков пальцев

Прежде чем перейти к отдельным методам, необходимо понять архитектуру обнаружения, потому что без этой основы все остальное — просто список претензий.

Расширение MV3 имеет четыре уровня перехвата, каждый из которых охватывает разные части поверхности отпечатка пальца.

Основной инструмент — скрипты контента основного мира"world": "MAIN" . Начиная с Chrome 111, вы можете объявить в "run_at": "document_start"своем манифесте, и ваш код будет выполняться непосредственно в контексте jаvascript страницы до выполнения любого скрипта страницы [8][9]. Это означает, что вы можете оборачивать прототипы объектами Proxy — заменить HTMLCanvasElement.prototype.toDataURLна прокси, который регистрирует вызовы, захватывает трассировки стека new Error().stackи, при необходимости, добавляет шум перед переадресацией к исходному объекту. Обратная связь с расширением осуществляется с помощью диспетчеризации CustomEvent на документе, передаваемой через скрипт контента изолированного мира фоновому сервисному работнику через chrome.runtime.sendMessage.

Протокол Chrome DevTools через chrome.debugger обеспечивает более широкий охват. Page.addScriptToEvaluateOnNewDocumentВнедряет код мониторинга до выполнения скриптов любого фрейма, сохраняя возможность навигации [10][11]. Runtime.addBindingСоздает именованные функции, вызываемые из контекста страницы, которые запускают события в расширении — более надежно, чем postMessage. И что особенно важно, Target.setAutoAttachприкрепляется flatten: trueк дочерним целям, включая междоменные iframe и Web Workers — это единственный способ перехватить отпечаток внутри воркеров, куда скрипты контента просто не могут попасть [12].

Стоит сразу отметить один нюанс пользовательского интерфейса: как только ваше расширение вызывает функцию отладки chrome.debugger.attach, Chrome отображает постоянное сообщение «[название расширения] начал отладку этого браузера» в верхней части вкладки и отключает инструменты разработчика для этого целевого браузера на время, пока отладчик подключен. Это предусмотрено разработчиками и не может быть отключено. Для инструмента криминалистического анализа это приемлемо (возможно, даже желательно — это делает перехват видимым для пользователя), но это исключает скрытое развертывание и станет неожиданностью для любого, кто впервые использует подобный подход при разработке.

Наблюдение за сетью использует неблокирующие chrome.webRequestслушатели, которые остаются полностью функциональными в MV3 [13]. Они отслеживают заголовки Client Hints и запросы к известным конечным точкам для снятия отпечатков пальцев. declarativeNetRequestПравила могут блокировать известные URL-адреса скриптов для снятия отпечатков пальцев и удалять заголовки отслеживания [14].

Необходимо учитывать следующее ограничениеFunction.prototype.toString : скрипты содержимого не могут внедряться в веб-воркеры или сервис-воркеры. Только CDP через API отладчика с помощью Target.setAutoAttach может отслеживать контексты воркеров. Более совершенные средства идентификации также могут обнаруживать ваши хуки, вызывая модифицированные методы — вам также необходимо обернуть метод toString, чтобы он возвращал значение "[native code]".

Теперь давайте рассмотрим каждый метод, который они используют против нас.

Снятие отпечатков пальцев на холсте

Это самый распространенный метод, который, согласно исследованию ACM 2025 года, встречается примерно на 12,7% из 20 000 лучших веб-сайтов [15]. Этот метод отрисовывает текст с помощью fillTextрастеризации шрифтов, специфичной для ОС, геометрических фигур с arcиспользованием bezierCurveToразличий в сглаживании GPU и полупрозрачных наложений, проверяющих точность альфа-композиции. Затем он извлекает пиксели toDataURL('image/png')и хеширует результат [16].

Реализация FingerprintJS с открытым исходным кодом отображает два изображения — текстовое изображение, включающее эмодзи, и геометрическое изображение — а затем выполняет проверку стабильности, отображая изображение дважды, чтобы обнаружить шум, внедренный браузером [17]. Исследование DrawnApart 2022 года показало, что даже номинально идентичные графические процессоры выдают разные результаты из-за производственных вариаций [18].

Chrome не применяет никаких мер защиты. Идентификация по отпечатку холста работает в полном объеме. Для перехвата вам понадобятся API HTMLCanvasElement.prototype.toDataURL, .toBlobи CanvasRenderingContext2D.prototype.getImageData.

WebGL-дактилоскопия

Расширение WEBGL_debug_renderer_infoпредоставляет доступ UNMASKED_VENDOR_WEBGLк UNMASKED_RENDERER_WEBGLстрокам, подобным "ANGLE (NVIDIA, GeForce RTX 4090 Direct3D11 vs_5_0 ps_5_0, D3D11)"[19][20]. Помимо строк рендерера, getParameter()перечисление собирает более 30 значений возможностей GPU — MAX_TEXTURE_SIZEсамо по себе раскрывает класс оборудования [21]. getSupportedExtensions()возвращает набор переменных платформы из 30-50 строк расширения и getShaderPrecisionFormat()раскрывает характеристики точности вершинного и фрагментного шейдеров [22][23].

Chrome не устарел WEBGL_debug_renderer_info, а Firefox устарел [24]. Для обнаружения требуется обертывание WebGLRenderingContext.prototype.getParameterи .getExtensionэквиваленты WebGL2.

Идентификация WebGPU

Это новая угроза. navigator.gpu.requestAdapter()Она раскрывает adapter.infoсвойства поставщика, архитектуры, устройства и описания. Объект adapter.limitsсодержит более 30 значений аппаратных возможностей, хотя Chrome сообщает значения уровней, а не точные пределы, чтобы уменьшить энтропию [25]. В статье ACM WiSec 2025 года было продемонстрировано, что поведение планирования вычислительных шейдеров GPU может повторно идентифицировать устройства с точностью до 70% из пула в 500 устройств [26]. WebGPU был включен в Chrome 113 и теперь доступен во всех основных браузерах [27].

Оттиск аудиоконтекста

Конвейер обработки сигналов Web Audio API используется для идентификации вашего устройства. Стандартный метод создает объект OfflineAudioContext(1, 5000, 44100), соединяет OscillatorNode через DynamicsCompressorNode с целевым устройством, вызывает метод, startRendering()а затем хеширует отрендеренный буфер с помощью getChannelData(0)[28][29]. Различные браузерные движки используют разные реализации БПФ и SIMD-оптимизации, что приводит к приблизительно 5,4 битам энтропии. FingerprintJS специально считывает из буфера номер сэмпла 3396, который, как было установлено, имеет наибольшую межбраузерную вариативность [30].

Дополнительные сигналы включают AudioContext.sampleRate, baseLatency, outputLatencyи destination.maxChannelCount[31][32]. Chrome не добавляет шум в аудиовыход — это работает полностью.

Перечисление шрифтов

Существует три подхода. Классический measureText()метод сравнивает ширину тестовой строки, отображаемой целевым шрифтом, с базовой резервной шириной [33]. document.fonts.check("12px FontName")Он предоставляет прямой оракул [34]. А API доступа к шрифтам ( window.queryLocalFonts()) напрямую перечисляет все установленные шрифты, но требует запроса разрешения [35][36]. Обнаружение шрифтов только @font-faceс помощью CSS использует src: local(FontName), url('/tracking-endpoint')- если локальный шрифт существует, URL никогда не загружается, и сервер определяет установленные шрифты по отсутствующим запросам [37]. Списки шрифтов предоставляют от 6,9 до 13,9 бит энтропии.

Навигатор и свойства экрана

Объект navigatorраскрывает многочисленные свойства, которые в совокупности формируют отпечаток средней или высокой энтропии. navigator.hardwareConcurrencyВозвращает логическое количество ядер ЦП без каких-либо мер по снижению нагрузки. navigator.deviceMemoryВозвращает сгруппированную оперативную память. navigator.languagesРаскрывает упорядоченный массив предпочтительных локалей — перестановка нескольких языковых предпочтений создает значительную энтропию [38].

navigator.pluginsТеперь возвращает жестко закодированный список из 5 строк для просмотра PDF-файлов, начиная примерно с Chrome 90 — фактически нейтрализовано. navigator.userAgentБыло сокращено и заморожено с Chrome 107 [39]. Но navigator.userAgentData.getHighEntropyValues()предоставляет путь замены, возвращая архитектуру, разрядность, полный список версий, модель и версию платформы через Promise [40][41].

Свойства экрана обеспечивают среднюю энтропию за счет комбинации размеров, глубины цвета и window.devicePixelRatio. Это screen.isExtendedсвойство позволяет создавать многомониторные конфигурации без запроса разрешения [42].

Утечки IP-адресов WebRTC

RTCPeerConnectionОбнаруживает IP-адреса во время сбора кандидатов ICE. Классический шаблон создает одноранговое соединение с STUN-сервером, вызывает createOffer()и setLocalDescription(), затем анализирует IP-адреса из onicecandidateсобытий. Chrome скрывает локальные и частные IP-адреса через mDNS начиная с Chrome 76, но проблема раскрытия публичных IP-адресов через STUN остается нерешенной [43][44]. Для обнаружения расширений требуется обернуть конструктор RTCPeerConnection в основной скрипт содержимого — chrome.webRequestневозможно перехватить UDP STUN-пакеты.

TLS-дактилоскопия

Вот что ускользает от нас. JA3 и JA4 отпечатки работают исключительно на сетевом уровне [45][46]. Начиная с Chrome 108, BoringSSL в Chrome рандомизирует порядок расширений TLS, что делает традиционные хеши JA3 нестабильными. JA4 решает эту проблему, сортируя наборы шифров и расширения перед хешированием. Расширения не могут наблюдать за исходным сообщением TLS ClientHello. Это критический пробел — пассивная отпечатка на сетевом уровне принципиально невидима для расширений браузера.

Отображение эмодзи и дактилоскопия

Каждая ОС использует свой собственный шрифт эмодзи — Windows использует Segoe UI Emoji, macOS — Apple Color Emoji, Android — Noto Color Emoji. Отображение эмодзи на холсте и хеширование пикселей приводит к результату, специфичному для каждой ОС. Исследование, протестировавшее 1791 эмодзи, выявило 114 с различиями в отображении в 11 браузерах [47]. Метод измерения DOMRect обеспечивает точность до 16 знаков после запятой по ширине и высоте даже без использования холста [48].

Идентификация синтеза речи

speechSynthesis.getVoices()Возвращает массив объектов SpeechSynthesisVoice, свойства name, lang, localService и voiceURI которых значительно различаются в зависимости от ОС и установленных голосовых пакетов. Chrome добавляет облачные голоса Google наряду с системными голосами, что создает высокую энтропию. Никаких разрешений или действий пользователя не требуется. Chrome не имеет средств защиты.

Идентификация раскладки клавиатуры по отпечаткам пальцев

navigator.keyboard.getLayoutMap()перечисляет сопоставление физических клавиш с символами, мгновенно различая раскладки QWERTY, AZERTY, QWERTZ, Dvorak и Colemak [49][50]. Firefox и Safari отказываются реализовывать этот API из-за проблем с отпечатками клавиш [51]. Chrome поставляется с ним без каких-либо ограничений.

Идентификация движения и датчиков

API Generic Sensor предоставляет данные калибровки, специфичные для конкретного производителя, через акселерометр и гироскоп, которые могут однозначно идентифицировать физические устройства. Спецификация W3C явно описывает эту угрозу. Chrome смягчает ее, округляя показания датчиков до 0,1 м/с? для акселерометров [52]. Sensor.timestampБыла обнаружена более тонкая утечка, которая раскрывает время загрузки устройства, а не время относительно страницы, создавая постоянный идентификатор.

Перечисление Bluetooth, USB и HID

Эти API следуют одному и тому же шаблону — первоначальное сопряжение устройств требует жеста пользователя плюс диалог выбора, но последующие вызовы getDevices()молча перечисляют ранее сопряженные устройства. navigator.usb.getDevices()Предоставляет vendorId, productId и, что особенно важно, serialNumber [53][54].

Математическая постоянная дактилоскопия

ECMAScript не дает точных указаний относительно реализаций трансцендентных функций. Math.tan(-1e308)Это приводит к наибольшей вариативности между браузерами [55][56]. Однако V8 использует fdlibm примерно с 2016 года, получая идентичные результаты на всех платформах Chrome — это делает математическую идентификацию полезной в первую очередь для различения движков браузеров, а не ОС внутри Chrome [57].

Идентификация медиа-запросов CSS

Это то, что не даёт мне спать по ночам, потому что работает без jаvascript. Медиа-запросы в совокупности обеспечивают более 10 бит энтропии через prefers-color-scheme, prefers-reduced-motion, colour-gamut, dynamic-range, forced-colours, pointerи hover[58]. В статье NDSS 2025 показано, что 702 из 922 версий браузеров можно однозначно идентифицировать @supportsтолько с помощью запросов [59]. Идентификация по CSS-отпечаткам запускает загрузку уникальных background-imageURL-адресов, журналы которых на стороне сервера раскрывают характеристики устройства, что делает обнаружение на основе скриптов контента в значительной степени неэффективным. Единственная защита на основе расширений — это блокировка на сетевом уровне отслеживающих URL-адресов, которые инициируются с помощью идентификации по CSS-отпечаткам.

Атаки на скорость работы API с использованием временных параметров

performance.now()обеспечивает точность в 100 микросекунд в неизолированных контекстах и 5 микросекунд при междоменной изоляции [60][61]. Это позволяет осуществлять проверку кэша, обнаружение расширений и XS-утечки. Можно SharedArrayBufferсоздавать наносекундные таймеры, но для этого требуются заголовки COOP и COEP, начиная с Chrome 92 [62].

Обнаружение установленных расширений

Проверка веб-доступных ресурсов с помощью сканирования запросов chrome-extension://[known-id]/[resource]— BrowserLeaks тестирует 5000 самых популярных расширений [63]. Меры обнаружения на основе времени показывают разницу в задержке между поддельными и реальными ресурсами расширений [64][65]. В статье USENIX Security 2021 года было обнаружено, что 17 712 расширений внедряют файлы CSS, которые можно обнаружить с помощью элементов DOM, являющихся приманками [66].

Оставшиеся векторы

Несколько дополнительных векторов дополняют поверхность идентификации. API батареи объединяет уровень, состояние зарядки и время для тысяч уникальных комбинаций, хотя Chrome на настольных компьютерах теперь возвращает жестко заданные значения по умолчанию [67][68]. API сетевой информации предоставляет информацию об эффективном типе соединения, времени загрузки и времени кругового пути [69][70]. API вычислительной нагрузки сообщает об использовании ЦП в четырех состояниях [71][72]. Обнаружение функций WebAssembly WebAssembly.validate()создает многобитовую битовую карту функций, различающую версии браузеров [73]. API геймпада предоставляет идентификаторы устройств, хотя Chrome требует предварительного нажатия кнопки. Web MIDI теперь требует запроса разрешения, начиная с Chrome 124 [74].

И всё это — абсолютно все эти методы — работают в Chrome прямо сейчас практически без встроенной защиты.


Часть 2: Хранение и отслеживание — механизмы, которые следуют за вами повсюду.

Если дактилоскопия предназначена для идентификации вашего устройства, то механизмы хранения и отслеживания предназначены для слежения за вами в интернете и во времени. В Chrome существует как минимум 23 различных вектора хранения и отслеживания на стороне клиента, которые можно использовать, и расширение MV3 с доступом к отладчику может обнаружить каждый из них [75].

Ландшафт печенья

После того, как Google в июле 2024 года отказался от поддержки сторонних файлов cookie и в октябре 2025 года прекратил поддержку API-интерфейсов, заменяющих Privacy Sandbox, сторонние файлы cookie остаются полностью работоспособными в Chrome, и сроки их удаления не определены [76][77][78]. Позвольте мне прояснить, что это означает: после шести лет обещаний удалить сторонние файлы cookie, после создания целой экосистемы Privacy Sandbox, якобы предназначенной для их замены, Google просто сдался и оставил их на месте.

Файлы cookie первой стороны остаются наиболее надежным способом отслеживания. Трекеры внедряют jаvascript первой стороны, который сохраняет идентификаторы до двух лет. Обнаружение использует chrome.cookies.getAll({domain: targetDomain})и chrome.cookies.onchangedдля мониторинга в реальном времени [79][80]. Storage.getCookiesКоманда CDP предоставляет альтернативный путь.

Сторонние файлы cookie устанавливаются доменами, отличными от главной страницы, как правило, через встроенные iframe, пиксели отслеживания или запросы, инициированные скриптами. Трекер, ads.example.comвстроенный на тысячи сайтов, поддерживает единый общий контейнер для файлов cookie, обеспечивающий полную идентификацию пользователей между сайтами. Для обнаружения требуется мониторинг Set-Cookieзаголовков ответов на междоменные запросы с помощью chrome.webRequest.onHeadersReceivedопции extraHeaders, которая необходима в MV3 [81][82].

Поведение SameSite регулирует передачу cookie-файлов между сайтами. SameSite=LaxЭто значение по умолчанию в Chrome, начиная с Chrome 80, ограничивающее использование cookie-файлов запросами внутри одного сайта плюс навигацией верхнего уровня. SameSite=None; SecureЯвно разрешает передачу между сайтами, что и требуется трекерам [83][84]. chrome.cookiesAPI предоставляет sameSiteсвойство в каждом объекте cookie, что позволяет обнаруживать cookie-файлы, разрешающие отслеживание.

CHIPS — Cookies Having Independent Partitioned State (файлы cookie с независимым разделением состояния) — появились в Chrome 114 и остаются одной из сохранившихся функций Privacy Sandbox. Этот Partitionedатрибут позволяет поместить cookie в хранилище с двойным ключом, используя комбинацию сайта верхнего уровня и домена cookie [85][86]. Разделенный cookie, установленный с помощью tracker.comвстроенного в , site-a.comневидим, когда tracker.comвстроен в site-b.com. Chrome ограничивает количество cookie до 180 на раздел, не превышая 10 КБ на встроенный сайт [87]. chrome.cookiesAPI поддерживает partitionKeyпараметр для полного перечисления с учетом разделов [88].

Отслеживание отказов и цепочки перенаправлений

Отслеживание отказов работает путем вставки переходов через домены трекеров во время навигации. Когда вы нажимаете на ссылку, браузер переходит по ней tracker.com/redirect?uid=X&dest=target.com, позволяя трекеру считывать и устанавливать файлы cookie первой стороны во время кратковременного посещения, а затем перенаправляет на целевую страницу [89]. Chrome запустил средства защиты от отслеживания отказов, которые отслеживают цепочки перенаправлений, отмечают отказы с сохранением состояния и удаляют все данные о доменах отказов без взаимодействия с пользователем за последние 45 дней [90][91]. Обнаружение использует chrome.webNavigation.onBeforeNavigateи onCommittedдля отслеживания цепочек перенаправлений, отмечая навигации, где квалификаторы перехода включают перенаправления сервера или клиента через известные домены трекеров.

Декорация ссылки

Этот метод коварен в своей простоте. Идентификаторы отслеживания добавляются в качестве параметров URL к исходящим ссылкам — fbclidот Facebook, gclidGoogle dclidAds, msclkidMicrosoft, srsltidGoogle Shopping и _gaGoogle Analytics [92][93]. Это позволяет осуществлять межсайтовое сопоставление идентификаторов путем передачи идентификатора пользователя с исходного сайта на целевой сайт в URL, где jаvascript первого уровня считывает его и сохраняет в виде cookie. Обнаружение отслеживает URL-адреса в обработчиках webRequest и webNavigation, анализируя параметры запроса на соответствие известному списку параметров отслеживания.

Маскировка CNAME

Это, пожалуй, самая коварная техника во всем арсенале отслеживания. Трекер настраивает запись DNS CNAME таким образом, чтобы она tracking.publisher.comразрешалась в tracker-server.thirdparty.com. Это заставляет запросы отслеживания выглядеть как запросы от первого лица, обходя блокировки cookie третьих сторон, блокировщики рекламы и расширения конфиденциальности [94][95][96].

Исследование Дао и др. выявило 1762 веб-сайта, использующих маскировку CNAME у 56 поставщиков отслеживания, при этом Adobe занимает 61%, за ним следуют Eulerian, Act-on и Criteo [97][98]. Критическая проблема безопасности заключается в том, что файлы cookie, включая *.publisher.comфайлы cookie аутентификации, автоматически отправляются в замаскированный трекер.

Chrome, в отличие от Firefox, где uBlock Origin выполняет поиск DNS, не предоставляет расширениям доступ к API DNS [99]. Для обнаружения в Chrome требуются альтернативные подходы: сравнение IP-адресов запросов с известными IP-адресами трекеров с использованием Network.responseReceivedсобытия CDP, которое включает в себя remoteIPAddress, использование поддерживаемых списков блокировки CNAME от AdGuard или EasyPrivacy или применение классификации шаблонов запросов поддоменов с помощью машинного обучения.

API веб-хранилища

localStorage сохраняется неограниченно долго, занимая примерно 5 МБ на каждый источник, сохраняется после перезапуска браузера и используется всеми вкладками одного источника. Он служит основой для повторного создания evercookie и supercookie — трекеры хранят UUID, который сохраняется после очистки cookie, поскольку пользователи редко очищают localStorage [100]. Событие storageсрабатывает во всех остальных вкладках того же источника при setItemвызове, обеспечивая координацию отслеживания между вкладками [101][102].

Начиная с Chrome 115, Chrome разделяет localStorage на контексты сторонних iframe, но localStorage первого уровня остается неразделенным [103][104]. Обнаружение через CDP использует DOMStorage.enableс последующим мониторингом событий DOMStorage.getDOMStorageItemsв реальном времени [105]. Перехват событий контекста страницы осуществляется с помощью скриптов основного контента monkey-patch .DOMStorage.domStorageItemAddeddomStorageItemUpdatedStorage.prototype.setItem

IndexedDB предлагает практически неограниченное хранилище с полными возможностями NoSQL. Исследователи из Принстона впервые задокументировали коммерческие суперкуки IndexedDB на weibo.com в 2014 году [106]. Chrome разделяет IndexedDB на контексты третьих сторон, начиная с Chrome 115 [107]. Обнаружение CDP используется IndexedDB.requestDatabaseNamesдля перечисления баз данных и IndexedDB.requestDataчтения содержимого хранилища объектов [108][109].

API кэширования и CacheStorage позволяют программно кэшировать ответы, содержащие идентификаторы отслеживания. Трекер вызывает функцию caches.open('tracker-cache')для cache.put(url, response)сохранения ответа, содержащего идентификатор пользователя, который сохраняется между сессиями. Обнаружение CDP использует CacheStorage.requestCacheNames[ CacheStorage.requestEntries110][111].

База данных Web SQL была полностью удалена из Chrome начиная с версии Chrome 124 в апреле 2024 года. Любое обнаружение window.openDatabase()вызовов указывает на устаревший мертвый код [112].

Отслеживание HTTP-заголовков

Отслеживание ETag и If-None-Match использует заголовки проверки HTTP-кэша для создания суперкуки без сохранения состояния. При первом запросе сервер отправляет ETag: "USER-7a3b9f2c"уникальный идентификатор для каждого пользователя, замаскированный под валидатор кэша. При последующих запросах браузер автоматически отправляет If-None-Match: "USER-7a3b9f2c"идентификатор, раскрывающий личность пользователя без использования jаvascript или куки [113][114]. Скандал с KISSmetrics в 2011 году продемонстрировал это на практике, что привело к коллективному иску.

Разделение HTTP-кэша Chrome, реализованное в Chrome 86, использует тройной ключ: сайт верхнего уровня, сайт фрейма и URL ресурса [115]. Это блокирует отслеживание ETag между сайтами, но отслеживание ETag собственными средствами остается полностью функциональным. Обнаружение отслеживает заголовки ответа ETag через chrome.webRequest.onHeadersReceivedи заголовки запроса If-None-Match через onBeforeSendHeaders, оба требуют extraHeadersналичия опции.

Суперкуки HSTS кодируют идентификаторы пользователей в состояниях HSTS PIN на нескольких поддоменах. Трекер, управляющий 32 поддоменами, может хранить 32-битный идентификатор — каждый поддомен, где установлен HSTS, представляет собой 1-бит [116][117]. Chrome решает эту проблему, очищая состояние HSTS при удалении куки и используя отдельные хранилища HSTS для сеансов инкогнито [118].

Отслеживание кэша значков favicon использует отдельную базу данных значков favicon браузера. В отличие от HTTP-кэша, кэш значков favicon исторически не очищался, когда пользователи очищали данные просмотра, и сохранялся в сеансах инкогнито [119][120]. Трекер кодирует биты, кэшируя и не кэшируя значки favicon по подпутям, а затем при повторных посещениях отслеживает, какие запросы на значки favicon поступают, а какие нет [121]. Разделение хранилища в Chrome 115 решает проблемы сторонних приложений, но кэш значков favicon остается архитектурно отдельным от стандартной очистки кэша.

Сохранение заголовка Alt-Svc позволяет отслеживать пользователя, назначая ему альтернативные конечные точки сервиса. Сервер отправляет запрос Alt-Svc: h2="user123.tracker.com:443"; ma=2592000, и в течение 30 дней браузер автоматически подключается к этой конкретной конечной точке, идентифицируя возвращающегося пользователя [122].

HTTP 103 Early Hints позволяют серверам отправлять предварительные заголовки Link для предварительной загрузки перед окончательным ответом. Потенциальные векторы отслеживания включают в себя цели предварительного подключения для каждого пользователя. Chrome ограничивает Early Hints только запросами HTTP/2+ верхнего уровня — низкий практический риск, не имеющий документально подтвержденного использования в производственной среде для отслеживания [123][124].

Работники и каналы перекрестных взаимосвязей

Сервисные работники обеспечивают наиболее устойчивый вектор отслеживания после файлов cookie. После регистрации сервисный работник сохраняется после закрытия вкладок и перезапуска браузера. Он перехватывает все сетевые запросы в рамках области действия через событие fetch, что позволяет внедрять идентификаторы. Google Tag Manager официально внедрил сервисные работники для отслеживания в марте 2025 года [125][126]. Фоновая синхронизация активирует работника при восстановлении связи, даже если нет открытых вкладок. Chrome 115 разделяет сторонние сервисные работники по сайтам верхнего уровня. Обнаружение использует CDP Target.getTargets()для перечисления всех целей сервисных работников и основных перехватчиков navigator.serviceWorker.register().

SharedWorkers сохраняется как один экземпляр на каждый источник, общий для всех вкладок, поддерживая состояние отслеживания в памяти без обращения к какому-либо API хранилища [127]. BroadcastChannel обеспечивает трансляцию сообщений между вкладками из одного источника, которую трекеры используют для мгновенной синхронизации идентификаторов между вкладками [128]. Оба механизма разделены на контексты сторонних сервисов, начиная с Chrome 115.

Исторически window.name сохранялось при переходах между сайтами, включая переходы между разными источниками, но теперь Chrome очищает его при переходах между сайтами. Этот вектор в значительной степени устарел [129].

Утечки рефереров

Начиная с Chrome 85 , по умолчанию Chrome strict-origin-when-cross-originотправляет только источник, а не полный URL-адрес междоменного запроса [130]. Однако сайты могут устанавливать более слабые правила. Критическая уязвимость — CVE-2025-4664 — позволяла злоумышленникам устанавливать referrer-policy: unsafe-urlчерез заголовки Link в запросах к подресурсам, что приводило к утечке полных URL-адресов с токенами. Она активно использовалась до того, как была исправлена в Chrome 136 [131][132].

API песочницы конфиденциальности

API общего хранилища предоставляет межсайтовое неразделенное хранилище типа «ключ-значение» с ограниченными выходными шлюзами. Оно было общедоступным, но планируется к поэтапному прекращению работы после вывода из эксплуатации «песочницы конфиденциальности» в октябре 2025 года [133][134].

API доступа к хранилищу позволяет встроенным межсайтовым iframe запрашивать доступ к неразделенным файлам cookie через document.requestStorageAccess(). Chrome 119+ поддерживает это с мерами безопасности, включая требования к жестам пользователя и предварительный визит на главный сайт в течение 30 дней [135][136][137].

API Topics классифицировал посещаемые сайты примерно по 469 категориям интересов, используя машинное обучение на устройстве. Он был выведен из эксплуатации в рамках закрытия в октябре 2025 года [138][139][140].


Архитектура обнаружения

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

Уровень 1 - chrome.debugger CDP обеспечивает самую глубокую проверку с доступом к доменам DOMStorage, IndexedDB, CacheStorage, Network, Storage, Target, ServiceWorker, Runtime и Security [141][142][143]. Ключевые команды включают DOMStorage.getDOMStorageItems, IndexedDB.requestDatabaseNames, CacheStorage.requestCacheNames, Network.enableсо всеми событиями запроса и ответа, а также Target.getTargetsдля перечисления рабочих процессов.

Уровень 2 — chrome.webRequest отслеживает весь HTTP-трафик в режиме MV3. onBeforeSendHeadersСобытие раскрывает исходящие заголовки отслеживания. Событие onHeadersReceivedперехватывает входящие заголовки отслеживания. Эта extraHeadersопция необходима в режиме MV3 для доступа к Set-Cookie и другим ограниченным заголовкам [144][145][146].

Уровень 3 - API chrome.cookies предоставляет полный CRUD-операции с куки. Он может читать куки только по протоколу http, в отличие от других методов document.cookie, получать доступ к куки через значения partitionKey, проверять атрибуты sameSite и перечислять хранилища куки для обычных и анонимных профилей [147].

Уровень 4 — скрипты основного контента используют среду выполнения jаvascript страницы, что позволяет модифицировать все соответствующие API [148][149]. Скрипты основного контента не могут напрямую обращаться к API Chrome — они взаимодействуют со скриптами контента изолированного мира через window.postMessage.

Требуемые права доступа к манифесту: cookies, webRequest, webNavigation, debugger, tabs, scripting, storage, privacyплюс host_permissions: ["<all_urls>"][150].


Полный справочник по обнаружению

Вектор Статус Chrome Наилучший метод обнаружения Ключевые API для перехвата
Холст Работает, но не требует смягчения последствий. Основной мировой прокси toDataURL, toBlob, getImageData
Вебгл Работает, не устарело Основной мировой прокси getParameter, getExtension
WebGPU Работы, многоуровневые ограничения Основной мировой прокси requestAdapter, adapter.info
Аудио Работает, но не требует смягчения последствий. Основной мировой прокси startRendering, getChannelData
Речь Работает, но не требует смягчения последствий. Основная мировая обертка speechSynthesis.getVoices
Шрифты (measureText) Работает, но не требует смягчения последствий. Основная мировая обертка measureText, fonts.check
Шрифты (Доступ к шрифтам) Доступ ограничен по разрешению Основная мировая обертка queryLocalFonts
Навигаторские реквизиты В основном работает, UA зависает Main-world defineProperty Геттеры Navigator.prototype
Реквизит для экрана Работает, но не требует смягчения последствий. Main-world defineProperty Геттеры Screen.prototype
Подсказки для клиента (JS) Работает только в Chromium. Основная мировая обертка getHighEntropyValues
Подсказки клиента (HTTP) Работы заголовки webRequest Заголовки Sec-CH-UA
WebRTC Локальные IP-адреса через mDNS Основной конструктор мира Proxy RTCPeerConnection
TLS (JA3/JA4) Расширение рандомизированного Не удается обнаружить на стороне клиента. Н/Д
Обнаружение расширений Работы, ВОЙНА, поддающаяся исследованию декларативныйNetRequest Блокировка запросов на зондирование
Отображение эмодзи Работает, но не требует смягчения последствий. То же самое, что и холст. fillText, getBoundingClientRect
CSS медиа-запросы Работает, но не требует смягчения последствий. Основной мир и сеть matchMedia, CSS URL loads
Время выполнения точность 100 мкс Основная мировая обертка performance.now
WebAssembly Работает, но не требует смягчения последствий. Основная мировая обертка WebAssembly.validate
Раскладка клавиатуры Работает только в Chromium. Основная мировая обертка getLayoutMap
Батарея Рабочий стол кастрирован Основная мировая обертка navigator.getBattery
Математические константы Только для автомобилей с другим двигателем. Основная мировая обертка Math.tan, Math.sin
Датчики Произведения, чтения подведены итоги. Основной мировой прокси Акселерометр, гироскоп
Файлы cookie первой стороны Полностью функционален API chrome.cookies getAll, onchanged
Сторонние файлы cookie Включено по умолчанию заголовки webRequest Мониторинг установки файлов cookie
ЧИПСЫ Двойной ключ chrome.cookies partitionKey перечисление partitionKey
Отслеживание отказов Меры по смягчению последствий для блокаторов 3P веб-навигация Отслеживание цепочки перенаправлений
Декорация ссылки Работает, но не требует смягчения последствий. разбор URL-адреса webRequest Сопоставление параметров запроса
Маскировка CNAME Без защиты Chrome CDP Network.responseReceived сравнение удаленных IP-адресов
локальное хранилище Произведения (1 страница, без разделителей) CDP DOMStorage setItem, getItem
Индексированная база данных Произведения (1 страница, без разделителей) Индексированная база данных CDP requestDatabaseNames
API кэширования Произведения (1 страница, без разделителей) CDP CacheStorage requestCacheNames
отслеживание ETag Произведения (1P) заголовки webRequest ETag, If-None-Match
HSTS суперпеченье Очищено с помощью файлов cookie заголовки webRequest Строгая транспортная безопасность
Кэш значка сайта Частично отделенный Мероприятия сети CDP Шаблоны цепочек перенаправлений
Работники сферы услуг Полностью функционален CDP Target.getTargets регистрация SW
Общее хранилище Выход на пенсию Основная мировая обертка sharedStorage.set
API доступа к хранилищу Поддерживается, защищается Основная мировая обертка requestStorageAccess

Заключение

Из этого анализа вытекают три основных момента.

Во-первых, Chrome практически не предоставляет встроенных средств защиты от идентификации пользователей. В отличие от Brave, Firefox или Tor Browser, Chrome поставляет API для работы с canvas, аудио, WebGL, шрифтами и синтезом речи совершенно незащищенными. Google потратил шесть лет на создание «песочницы конфиденциальности», забросил её и оставил нас ни с чем.

Во-вторых, отслеживание со стороны самих пользователей остается совершенно неконтролируемым. Каждый API хранилища, каждый механизм кэширования и каждый трюк с HTTP-заголовками работают в полную силу при выполнении в контексте собственных данных. Маскировка CNAME делает это особенно опасным, поскольку она маскирует сторонние трекеры под собственные поддомены, и Chrome — единственный крупный браузер, который не блокирует маскировку CNAME изначально и не предоставляет расширения для обнаружения через API DNS.

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

Я всю жизнь боролась за право на неприкосновенность частной жизни, потому что видела, что происходит, когда это право отнимают. Технологии, описанные в этом документе, не являются теоретическими — они ежедневно применяются в масштабах, затрагивая миллиарды людей. Понимание этих технологий — первый шаг. Создание инструментов для их обнаружения и выявления — следующий.

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


Ссылки

[1] «Ваш браузер уникален среди миллионов: как работает дактилоскопия», DEV Community. https://dev.to/michael_lip_52d5151c3e364/your-browser-is-unique-among-millions-how-fingerprinting-works-84a

[2] «Руководство по дактилоскопии браузеров 2026», Прокси. https://www.proxies.sx/use-cases/privacy/fingerprinting

[3] «Блокировать (большинство) отпечатков canvas и webgl по умолчанию», Браузер Brave, GitHub. https://github.com/brave/browser-laptop/pull/1354/files

[4] «Обнаружение отпечатков браузера и защита от отслеживания», arXiv. https://arxiv.org/html/2502.14326v1

[5] «Обновление планов по внедрению технологий песочницы конфиденциальности», Google Privacy Sandbox. https://privacysandbox.google.com/blog/update-on-plans-for-privacy-sandbox-technologies

[6] «Google Privacy Sandbox официально закрывается», Usercentrics. https://usercentrics.com/knowledge-hub/what-is-google-privacy-sandbox/

[7] «Chrome уничтожает большинство технологий «песочницы конфиденциальности» после провала внедрения», PPC Land. https://ppc.land/chrome-kills-most-privacy-sandbox-technologies-after-adoption-fails/

[8] «Как внедрить глобальную переменную с помощью веб-расширений в Manifest V3», Дэвид Уолш. https://davidwalsh.name/inject-global-mv3

[9] «Скрипты контента», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts

[10] "chrome.debugger API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/debugger

[11] «Что такое протокол инструментов разработчика Chrome (CDP)?», Decodo. https://decodo.com/glossary/cdp

[12] «Учебное пособие: протокол Chrome Devtools (CDP)», Sitespeed. https://www.sitespeed.io/documentation/sitespeed.io/scripting/tutorial-11-Chrome-Devtools-Protocol.html

[13] «Документация webRequest и устаревание MV3», Расширения Chromium, Google Groups. https://groups.google.com/a/chromium.org/g/chromium-extensions/c/MPCKIx2Rgv8

[14] "chrome.declarativeNetRequest API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest

[15] «Создание отпечатков пальцев на холсте», Википедия. https://en.wikipedia.org/wiki/Canvas_fingerprinting

[16] «Что такое дактинография Canvas?», Conbersa. https://www.conbersa.ai/learn/what-is-canvas-fingerprint

[17] «fingerprintjs/src/sources/canvas.ts», FingerprintJS, GitHub. https://github.com/fingerprintjs/fingerprintjs/blob/master/src/sources/canvas.ts

[18] «DRAWNAPART: Метод идентификации устройств на основе удаленного отпечатка графического процессора», arXiv. https://arxiv.org/abs/2201.09956

[19] «Расширение WEBGL_debug_renderer_info», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info

[20] «Что такое WebGL Fingerprinting и как его обойти в 2026 году», Roundproxies. https://roundproxies.com/blog/webgl-fingerprinting/

[21] «Датчик браузера», Pydoll. https://pydoll.tech/docs/deep-dive/fingerprinting/browser-fingerprinting/

[22] «WebGLRenderingContext: метод getShaderPrecisionFormat()», документация MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getShaderPrecisionFormat

[23] «Что такое WebGL Fingerprinting? Как это работает и советы», Medium. https://medium.com/@datajournal/webgl-fingerprinting-60893a9ca382

[24] «Не примечание: функция WEBGL_debug_renderer_info устарела в Firefox», MDN Content, GitHub. https://github.com/mdn/content/issues/12689

[25] «База данных характеристик WebGPU», Scrapfly. https://scrapfly.io/web-scraping-tools/gpu-fingerprint/webgpu

[26] «Выявление рисков конфиденциальности в WebGPU с помощью аппаратной идентификации устройств», ACM WiSec. https://dl.acm.org/doi/10.1145/3734477.3734700

[27] «WebGPU достиг критической массы: теперь его поддерживают все основные браузеры», Сообщество WebGPU. https://www.webgpu.com/news/webgpu-hits-critical-mass-all-major-browsers/

[28] «Аудиоконтекстная идентификация», Darkwave Technologies. https://www.darkwavetech.com/projects/device-fingerprinting/audiocontext-fingerprinting

[29] «Как используется Web Audio API для идентификации браузера», DEV Community. https://dev.to/savannahjs/how-the-web-audio-api-is-used-for-browser-fingerprinting-4oim

[30] «Аудио-отпечатки пальцев: что это такое и как это работает с Web API», Fingerprint. https://fingerprint.com/blog/audio-fingerprinting/

[31] «AudioContext: свойство outputLatency», веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/outputLatency

[32] «Как мы обошли защиту от расширенного аудиоотпечатка Safari 17», Fingerprint. https://fingerprint.com/blog/bypassing-safari-17-audio-fingerprinting-protection/

[33] «Отпечатки браузера в двух словах», Наиф Механна. https://naifmehanna.com/2018-09-16-browser-fingerprints-in-a-nutshell/

[34] "FontFaceSet.check", W3cubDocs. https://docs.w3cub.com/dom/fontfaceset/check

[35] «Используйте расширенную типографику с локальными шрифтами», Chrome для разработчиков. https://developer.chrome.com/docs/capabilities/web-apis/local-fonts

[36] "WICG/local-font-access", GitHub. https://github.com/WICG/local-font-access

[37] «Тестер утечек шрифтов», Trust My IP. https://trustmyip.com/font-leak-tester

[38] «jаvascript-трюки: Отпечаток устройства», Medium. https://medium.com/@6465660/jаvascript-tricks-device-fingerprint-f0680b284337

[39] «Снятие отпечатков браузера: полное руководство по обнаружению и защите», Multilogin. https://multilogin.com/blog/browser-fingerprinting-the-surveillance-you-can-t-stop/

[40] «Подготовка к использованию клиентских подсказок Chrome User-Agent», MGID. https://www.mgid.com/blog/preparing-for-chrome-user-agent-client-hints-an-update-for-mgid-clients

[41] «API подсказок клиента User-Agent», веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/API/User-Agent_Client_Hints_API

[42] "window-management/EXPLAINER.md", W3C, GitHub. https://github.com/w3c/window-management/blob/main/EXPLAINER.md

[43] «PSA: Частные IP-адреса, раскрываемые WebRTC, меняются на имена хостов mDNS», Google Groups. https://groups.google.com/g/discuss-webrtc/c/6stQXi72BEU

[44] «Prflxion — утечка IP-адресов WebRTC», Medium. https://medium.com/@peer5/prflxion-a-webrtc-ip-leak-60b3d6b82f49

[45] «Перестановка расширений TLS в Google Chrome», GitHub. https://github.com/net4people/bbs/issues/220

[46] «Отпечатки JA3 исчезают по мере того, как браузеры переходят к рандомизации расширений TLS», Stamus Networks. https://www.stamus-networks.com/blog/ja3-fingerprints-fade-browsers-embrace-tls-extension-randomization

[47] «Различия в отображении эмодзи, достаточные для идентификации устройств и браузеров», PortSwigger. https://portswigger.net/daily-swig/emoji-rendering-differences-enough-to-identify-devices-and-browsers

[48] «Эмодзи с отпечатками пальцев», Проверка конфиденциальности Технического университета Мюнхена. https://privacycheck.sec.lrz.de/active/fp_e/fp_emoji.html

[49] «Keyboard API», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/Keyboard_API

[50] «Отключить отпечаток API клавиатуры», Браузер Brave, GitHub. https://github.com/brave/brave-browser/issues/3964

[51] «Спецификация карты клавиатуры», WICG. https://wicg.github.io/keyboard-map/

[52] «Датчики для веб-сайтов», Разработчики Chrome. https://chrome.jscn.org/articles/generic-sensor/

[53] «Спецификация Web Bluetooth», WebBluetoothCG. https://webbluetoothcg.github.io/web-bluetooth/

[54] "Bluetooth: метод getDevices()", Веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices

[55] «Математика постоянно меняется», macwright.com. https://macwright.com/2020/02/14/math-keeps-changing

[56] «Идентификация математических рутинных действий», Darkwave Technologies. https://www.darkwavetech.com/projects/device-fingerprinting/math-routine-fingerprinting

[57] «Намерение реализовать: использовать fdlibm для Math.cos, Math.sin и Math.tan», Mozilla dev-platform, Google Groups. https://groups.google.com/a/mozilla.org/g/dev-platform/c/0dxAO-JsoXI/m/eEhjM9VsAgAJ

[58] «Какие существуют методы идентификации браузеров по отпечаткам пальцев», Factually. https://factually.co/fact-checks/technology/browser-fingerprinting-techniques-and-how-to-reduce-your-fingerprint-b661d2

[59] «Каскадные шпионские таблицы», NDSS 2025 (упоминается в исследовании по идентификации браузеров). https://multilogin.com/blog/browser-fingerprint-chrome/

[60] «План выпуска: Согласовать разрешение таймера API производительности с возможностями кросс-доменной изоляции», Chromium Blink-dev, Google Groups. https://groups.google.com/a/chromium.org/g/blink-dev/c/k6M3HJiqmkE

[61] «Производительность: метод now()», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

[62] «О высокоточных таймерах jаvascript», Incolumitas. https://incolumitas.com/2021/12/18/on-high-precision-jаvascript-timers/

[63] «Обнаружение расширений Chrome», BrowserLeaks. https://browserleaks.com/chrome

[64] «Extension-detector: Инструмент для определения расширений браузера», DataDome. https://datadome.co/anti-detect-tools/extension-detector/

[65] «Ненужная идентифицируемость: количественная оценка возможности идентификации расширений браузера из-за раздувания», ACM. https://dl.acm.org/doi/fullHtml/10.1145/3308558.3313458

[66] «Идентификация по стилю: обнаружение расширений браузера с помощью внедренных таблиц стилей», USENIX Security 2021. https://www.usenix.org/system/files/sec21fall-laperdrix.pdf

[67] «Детектор состояния батареи», Scrapfly. https://scrapfly.io/web-scraping-tools/battery-status

[68] «API состояния батареи», W3C. https://w3c.github.io/battery/

[69] «NetworkInformation: свойство effectiveType», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/effectiveType

[70] «API сетевой информации», WICG. https://wicg.github.io/netinfo/

[71] «API Compute Pressure: подробный анализ», Catch Metrics. https://www.catchmetrics.io/blog/compute-pressure-api-a-deep-dive-into-adaptive-web-performance

[72] "w3c/compute-pressure", GitHub. https://github.com/w3c/compute-pressure

[73] «Создание отпечатков браузеров с помощью WebAssembly», arXiv. https://arxiv.org/pdf/2506.00719

[74] "GoogleChromeLabs/wasm-feature-detect", GitHub. https://github.com/GoogleChromeLabs/wasm-feature-detect/tree/main

[75] «Разделение хранилища», Google Privacy Sandbox. https://privacysandbox.google.com/cookies/storage-partitioning

[76] «Как отказ от сторонних файлов cookie влияет на программную экосистему», Adtelligent. https://adtelligent.com/blog/ad-tech-insights/how-third-party-cookies-elimination-will-affect-programmatic-ecosystem/

[77] «Разворот в вопросе отказа от использования файлов cookie Google», CookieYes. https://www.cookieyes.com/blog/google-cookie-deprecation/

[78] «Обновление планов по внедрению технологий песочницы конфиденциальности», Google. https://privacysandbox.google.com/blog/update-on-plans-for-privacy-sandbox-technologies

[79] "chrome.cookies API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/cookies

[80] «Понимание файлов cookie расширений Chrome», Medium. https://m2kdevelopments.medium.com/16-understanding-chrome-extensions-cookies-4c4557a812b3

[81] «Надежное обнаружение блокировки сторонних файлов cookie в 2025 году», Smashing Magazine. https://www.smashingmagazine.com/2025/05/reliably-detecting-third-party-cookie-blocking-2025/

[82] «Объяснение атрибута cookie SameSite», Cookie-Script. https://cookie-script.com/documentation/samesite-cookie-attribute-explained

[83] «Руководство по атрибутам cookie SameSite: Lax, Strict, None», Kukie. https://kukie.io/blog/samesite-cookie-attribute-explained

[84] «Объяснение атрибута cookie SameSite», Cookie-Script. https://cookie-script.com/documentation/samesite-cookie-attribute-explained

[85] «Файлы cookie с независимым разделенным состоянием (CHIPS)», веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Privacy_sandbox/Partitioned_cookies

[86] «Файлы cookie с независимым разделенным состоянием (CHIPS)», Google Privacy Sandbox. https://privacysandbox.google.com/cookies/chips

[87] «Спецификация CHIPS», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Privacy_sandbox/Partitioned_cookies

[88] "chrome.cookies API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/cookies

[89] «Меры по предотвращению отслеживания отказов», Google Privacy Sandbox. https://privacysandbox.google.com/protections/bounce-tracking-mitigations

[90] «Помогите протестировать меры по смягчению последствий отслеживания отказов», блог Chrome для разработчиков. https://developer.chrome.com/blog/bounce-tracking-mitigations-dev-trial

[91] «Меры по смягчению последствий отслеживания навигации», Privacy CG. https://privacycg.github.io/nav-tracking-mitigations/

[92] «Предотвращение отслеживания на основе оформления ссылок с помощью строки запроса или фрагмента», Brave Browser, GitHub. https://github.com/brave/brave-browser/issues/4239

[93] «Как настроить условное оформление ссылок для междоменного отслеживания», Optizent. https://www.optizent.com/blog/how-to-set-up-conditional-link-decoration-for-cross-domain-tracking/

[94] «Отслеживание в сети на основе маскировки CNAME», IEEE TNSM. https://ieeexplore.ieee.org/document/9403411/

[95] «Онлайн-трекеры все чаще переходят на инвазивную технику маскировки CNAME», The Hacker News. https://thehackernews.com/2021/02/online-trackers-increasingly-switching.html

[96] «Как работает отпечаток браузера: подробный разбор», Octo Browser. https://blog.octobrowser.net/how-browser-fingerprinting-works

[97] «Отслеживание в сети на основе маскировки CNAME: характеристика, обнаружение и защита», Дао и др., IEEE TNSM 2021. http://www.fukuda-lab.org/publications/2021/DMF_tnsm2021.pdf

[98] «Подход машинного обучения для обнаружения отслеживания на основе маскировки CNAME», Конференция IEEE. https://ieeexplore.ieee.org/document/9322514/

[99] «Маскировка CNAME: маскировка третьих лиц через DNS», Palo Alto Networks, подразделение 42. https://unit42.paloaltonetworks.com/cname-cloaking/

[100] «Evercookie», Википедия. https://en.wikipedia.org/wiki/Evercookie

[101] «Межвкладочная связь с использованием localStorage», Coderwall. https://coderwall.com/p/bmzw8g/cross-tab-communication-using-localstorage

[102] "LocalStorage, sessionstorage," jаvascript.info. https://jаvascript.info/localstorage

[103] «Разделение хранилища», Google Privacy Sandbox. https://privacysandbox.google.com/cookies/storage-partitioning

[104] «Разделение хранилища», Chrome для разработчиков. https://developer.chrome.com/docs/privacy-sandbox/storage-partitioning/

[105] «Протокол Chrome DevTools — домен DOMStorage». https://chromedevtools.github.io/devtools-protocol/tot/DOMStorage/

[106] «Использование утечек информации API IndexedDB», ссылка на форуме MalwareTips. https://malwaretips.com/threads/exploiting-indexeddb-api-information-leaks-in-safari-15.111978/

[107] «Разделение хранилища — IndexedDB», Chrome для разработчиков. https://developer.chrome.com/docs/privacy-sandbox/storage-partitioning/

[108] "Протокол Chrome DevTools - домен IndexedDB." https://chromedevtools.github.io/devtools-protocol/tot/IndexedDB/

[109] «Протокол Chrome DevTools — Домен хранения». https://chromedevtools.github.io/devtools-protocol/tot/Storage/

[110] "Протокол Chrome DevTools - домен CacheStorage." https://chromedevtools.github.io/devtools-protocol/tot/CacheStorage/

[111] «Примите участие в раннем тестировании разделения хранилища», Google Developers. https://developers.google.com/privacy-sandbox/blog/storage-partitioning-dev-trial

[112] «Evercookie — удаление Web SQL», Википедия. https://en.wikipedia.org/wiki/Evercookie

[113] «Диагностическая печать ETag», Проверка конфиденциальности Технического университета Мюнхена. https://privacycheck.sec.lrz.de/passive/fp_etag/fp_etag.php

[114] «HTTP ETag», Википедия. https://en.wikipedia.org/wiki/HTTP_ETag

[115] «Обеспечение безопасности и конфиденциальности путем разделения кэша», блог Chrome для разработчиков. https://developer.chrome.com/blog/http-cache-partitioning

[116] "HSTS Supercookie", GitHub. https://github.com/ben174/hsts-cookie

[117] «Apple блокирует сайты, использующие стандарт безопасности HSTS для отслеживания пользователей», The Hacker News. https://thehackernews.com/2018/03/hsts-supercookie-tracking.html

[118] «Переосмысление суперкуки HSTS», Browserprint, Университет Аделаиды. https://browserprint.services.adelaide.edu.au/blog/hstsSupercookie

[119] «Фавиконы могут использоваться для отслеживания пользователей», — упоминается в нескольких источниках. https://bitcoinwithmoney.com/technology/favicons-may-be-used-to-track-users/

[120] «supercookie: Идентификация браузера по отпечатку через фавикон», GitHub. https://github.com/jonasstrehle/supercookie

[121] «Фавиконы браузера как суперкуки для отслеживания пользователей», CCL Solutions Group. https://www.cclsolutionsgroup.com/post/browser-favicons-as-user-tracking-supercookies

[122] «Как работает отпечаток браузера: подробный разбор», Octo Browser. https://blog.octobrowser.net/how-browser-fingerprinting-works

[123] «Документация Chromium — 103 первых подсказки». https://chromium.googlesource.com/chromium/src/+/master/docs/early-hints.md

[124] «103 Первые подсказки», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/103

[125] «Сохранение через работников сервисной службы», TrustedSec. https://trustedsec.com/blog/persistence-through-service-workers-part-1-introduction-and-target-application-setup

[126] «Google Tag теперь использует сервис-воркеров для улучшения сбора данных», PPC Land. https://ppc.land/google-tag-now-leverages-service-workers-to-enhance-data-collection/

[127] «Лучший способ совместного использования одного соединения WebSocket на нескольких вкладках», CyberAngles. https://www.cyberangles.org/blog/best-proper-way-to-share-a-single-websocket-connection-across-multiple-tabs/

[128] «Разделение хранилища — BroadcastChannel», Google Privacy Sandbox. https://privacysandbox.google.com/cookies/storage-partitioning

[129] «Хранилище и cookie», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/develop/concepts/storage-and-cookies

[130] «Новая политика Referrer по умолчанию для Chrome», блог Chrome для разработчиков. https://developer.chrome.com/blog/referrer-policy-new-chrome-default

[131] «CISA: Недавно исправленная уязвимость Chrome используется в реальных условиях (CVE-2025-4664)», Help Net Security. https://www.helpnetsecurity.com/2025/05/16/cisa-recently-fixed-chrome-vulnerability-exploited-in-the-wild-cve-2025-4664/

[132] «Новая уязвимость Chrome позволяет осуществлять междоменную утечку данных через политику рефереров загрузчика», The Hacker News. https://thehackernews.com/2025/05/new-chrome-vulnerability-enables-cross.html

[133] «API общего хранилища», веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/API/Shared_Storage_API

[134] «Статус функции «Песочница конфиденциальности»», Google. https://privacysandbox.google.com/overview/status

[135] «Доступ к хранилищу без файлов cookie через API доступа к хранилищу», Google Developers. https://developers.google.com/privacy-sandbox/blog/saa-non-cookie-storage

[136] «API доступа к хранилищу», веб-документация MDN. https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API

[137] «API тем», Privacy Sandstorm. https://privacysandstorm.com/privacy-sandbox/topics/

[138] «API тем», MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/API/Topics_API

[139] «Chrome уничтожает большинство технологий песочницы конфиденциальности», PPC Land. https://ppc.land/chrome-kills-most-privacy-sandbox-technologies-after-adoption-fails/

[140] «Google Privacy Sandbox официально закрывается», Usercentrics. https://usercentrics.com/knowledge-hub/what-is-google-privacy-sandbox/

[141] "chrome.debugger API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/debugger

[142] «Протокол Chrome DevTools из расширений», Medium. https://medium.com/@dzianisv/vibe-engineering-chrome-devtools-protocol-from-extensions-you-dont-need-to-fork-chromium-72a9ffb68b6d

[143] «Протокол Chrome DevTools — домен DOMStorage». https://chromedevtools.github.io/devtools-protocol/tot/DOMStorage/

[144] «Замена обработчиков блокирующих веб-запросов», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/develop/migrate/blocking-web-requests

[145] «Документация webRequest и MV3», Расширения Chromium, Google Groups. https://groups.google.com/a/chromium.org/g/chromium-extensions/c/MPCKIx2Rgv8

[146] «Манифест — скрипты контента», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/manifest/content-scripts

[147] "chrome.cookies API", Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/api/cookies

[148] «Скрипты контента», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts

[149] «Объявление разрешений», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions

[150] «Список разрешений», Chrome для разработчиков. https://developer.chrome.com/docs/extensions/reference/permissions-list