Согласованность браузера между 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 и приватность между поверхностями.
- WHATWG HTML: Web application APIs and realms
- WHATWG HTML: Web messaging
- MDN: Using web workers
- MDN: Window.postMessage
- BotBrowser advanced features
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.