Назад к блогу
Платформа

Согласованность браузера между Realm и границы приватности

Определяйте границы Window, Worker и iframe и не превращайте различия объектов JavaScript в сигнал идентичности.

BotBrowser Team

Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

Приложение может сохранять предсказуемые границы между Window, Worker и iframe, ограничивая данные, которые передаются между этими контекстами. Стандарт WHATWG HTML описывает эти Realm, а BotBrowser может повторять авторизованный сценарий в контролируемом контексте, но не гарантирует приватность удалённого сайта.

Одна страница может содержать несколько Realm

Спецификация WHATWG HTML определяет эти границы, а BotBrowser может повторять разрешённый сценарий в заявленном контролируемом контексте, но локальная проверка не является гарантией удалённой приватности.

Верхний Window не единственный JavaScript-среда. У выделенного Worker есть собственная глобальная область, а iframe создаёт отдельный Realm документа. У каждого Realm свои глобальные и встроенные объекты, правила хранения и контекст политик. Поэтому ссылку вроде Array следует трактовать в Realm, который её создал.

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

Что пересекает границу

Frame одного источника могут общаться через Window.postMessage, а worker общается с владеющей страницей через postMessage. Структурированное клонирование копирует многие значения. Массив в получающем Realm не является тем же объектом, что у отправителя, даже при одинаковом содержимом. Передаваемый ArrayBuffer меняет владельца, после чего буфер отправителя следует считать отсоединённым.

Frame другого источника остаются изолированными политикой same-origin. postMessage доступен, но получатель должен проверять event.origin и, при необходимости, nonce. event.source является ссылкой WindowProxy, а не доверенным удостоверением. Не используйте форму сообщения, идентичность конструктора или исключение браузера для аутентификации.

Worker не разделяет DOM документа. Он может получить данные, вычислить результат и вернуть его, но не может напрямую читать элементы страницы или предполагать её хранилище и разрешения. Сервисный worker имеет иной жизненный цикл и область действия; это не замена выделенному worker или iframe.

Согласованность требует явного контракта

Определите схему, владение и срок жизни каждого значения, отправляемого из Window в Worker или iframe. Передавайте записи, массивы, строки и числа, которые получатель может проверить; добавляйте версию, если сообщение переживает релиз. Не передавайте функции, DOM-узлы или прототипы Realm, ожидая сохранения поведения. Документируйте, кто владеет переданным ресурсом после доставки.

const worker = new Worker('/realm-worker.js', { type: 'module' });
const request = { version: 1, values: [2, 3, 5] };
worker.onmessage = ({ data }) => {
  if (data?.version !== 1 || !Array.isArray(data.values)) throw new Error('invalid reply');
  console.log({ sum: data.values.reduce((a, b) => a + b, 0), realm: data.realm });
};
worker.postMessage(request);
// realm-worker.js
self.onmessage = ({ data }) => {
  if (data?.version !== 1 || !Array.isArray(data.values)) return;
  self.postMessage({ version: 1, values: data.values, realm: 'worker' });
};

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

Границы приватности, которые нужно сохранять

iframe видит только то, что открывают его документ и разрешения. Одноимённый iframe может иметь широкий доступ приложения, а междоменный должен получать только явно делегированные сообщения и возможности. Используйте узкий протокол postMessage, точный targetOrigin и при необходимости sandbox или политику разрешений. Не передавайте токены и записи аккаунта лишь потому, что канал доступен.

Перенос кода в Worker может уменьшить доступ к DOM, но не делает входные данные частными от страницы-источника или сервиса-получателя. Минимизация данных, хранение и согласие остаются политикой приложения.

Различия Realm могут измеряться: идентичность конструкторов, доступность функций, язык и наблюдения планирования. Одно наблюдение не доказывает марку браузера, устройство или человека. Не объединяйте проверки в скрытый идентификатор; проверяйте только нужные возможности и удаляйте диагностику после проверки.

Таблица решений

НаблюдениеВладелецБезопасное действиеЧего не следует выводить
Ошибка проверки схемыПолучающий RealmОтклонить и сообщить синтетическую ошибкуЛичность или злой умысел отправителя
Неожиданный event.originПолитика получателяИгнорировать и записать ограниченное событиеДоверие всем сообщениям источника
Значение клонированоСтруктурированное клонированиеПроверить содержимое и использовать объекты получателяОбщий прототип или объект
Передаваемый объект отсоединёнКонтракт передачиПрекратить использование ресурса отправителяОшибку браузера или личность
Функция отсутствуетВозможности RealmИспользовать документированный запасной путьУникальное устройство или браузер

Возможности и ограничения BotBrowser

BotBrowser поддерживает повторение авторизованных сценариев Window, Worker и iframe в контролируемом контексте, но не может выровнять Realm или доказать приватность удалённого сайта.

Контролируемые контексты BotBrowser могут повторять разрешённые сценарии Window, Worker и iframe с заявленным профилем и сравнивать видимые результаты изолированных контекстов. Это помогает проверять протокол Realm, проверку источника и запасной путь приложения. BotBrowser не делает Realm одинаковыми, не выдаёт междоменный доступ, не аутентифицирует сообщения и не гарантирует одинаковые функции каждого релиза. Он не управляет хранением данных удалённым сайтом; локальная проверка не доказывает анонимность или приватность в продакшене.

Тест навигации должен сохранять только видимые состояния, необходимые для диагностики контракта.

Ожидаемый результат должен описывать успешный путь и восстановление при недоступной возможности.

Новый контекст помогает обнаружить унаследованное состояние, но не обещает удаление данных на сервере.

Приложение должно закрывать worker, frame и временные серверы даже после ошибки проверки.

Идентификатор запроса ограничивает повторные попытки и связывает ответ с правильной операцией.

Интерфейс должен сообщать о тайм-ауте доступным текстом и предлагать понятное восстановление.

Синтетические данные делают проверку воспроизводимой и уменьшают раскрытие настоящего содержимого.

После навигации iframe смена источника требует повторно проверить протокол до принятия ответа.

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

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

Различие между Realm является сигналом совместимости, а не идентичностью пользователя.

Открытые источники

Связанные материалы: политика same-origin и приватность между поверхностями.

Window, Worker и iframe обмениваются проверенными сообщениями в явных границах приватности.

#Приватность Браузера#Window#Worker#Iframe#Realm

Переведите BotBrowser из исследований в продакшн

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