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

Изоляция content script в расширениях браузера

Как изолированные миры отделяют JavaScript расширения от страницы, почему DOM остаётся общим и как проверять границу сообщений.

BotBrowser Team

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

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

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

BotBrowser может повторить разрешённый тест расширения и наблюдать видимые результаты DOM и сообщений, но не может выдать разрешения узла или сделать данные страницы доверенными.

Content script расширения может читать и изменять DOM страницы, выполняя свои переменные в отдельной среде JavaScript. Это изолированный мир, а не второй DOM и не универсальная граница безопасности. Страница и расширение видят многие одни и те же узлы, но не обязаны делить переменные, прототипы или внутреннее состояние. Привилегированную работу оставляйте расширению, а сообщения оформляйте как явный проверяемый интерфейс.

Страница и content script используют общий DOM, но разные JavaScript-миры и явные сообщения к service worker расширения

Кратко

  • Изолированный мир разделяет JavaScript-ссылки, но видимый DOM может оставаться общим.
  • Проверяйте тип, отправителя, origin и структуру каждого сообщения.
  • BotBrowser повторяет синтетические разрешённые fixture, но не выдаёт разрешения и не доказывает удалённую операцию.

Содержание

Общий DOM и события

Класс или текст, добавленный content script, виден странице. Mutation observer сообщает об изменении, но не подтверждает действие пользователя. Ограничивайте наблюдаемое поддерево и повторно проверяйте состояние перед привилегированной операцией.

Связанные материалы

См. целостность API между realms и fixtures автоматизации и изоляции.

Что означает изоляция

Браузер создаёт для content script отдельный глобальный объект и отдельные JavaScript-ссылки. Переменная страницы не становится автоматически видимой скрипту, и наоборот. Прототипы тоже могут различаться: изменение window.Array страницей не подменяет ссылку расширения.

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

Доступ всё равно ограничивают правила манифеста и шаблоны доступа к узлам. Привилегированные API должны оставаться в контексте расширения или его фонового сервиса. Изоляция не открывает любые URL, frame или API.

Явное пересечение границы

Используйте messaging для состояния расширения. Проверяйте тип, отправителя, origin и форму данных. Если странице нужно участвовать, применяйте небольшой мост через window.postMessage с идентификатором запроса и строгой проверкой origin. Сообщение страницы не является аутентифицированной командой.

Не внедряйте строки в главный мир, если достаточно API content script. Если мост необходим, исключите секреты и повторно проверяйте каждый запрос в привилегированной части.

Проверка границы

Соберите fixture со скриптом страницы, content script и фоновым сервисом расширения. Создайте одноимённые переменные, замените прототип на странице и запишите наблюдаемые значения и изменения DOM. Повторите тест для frame, запрещённого URL, перезагрузки и перезапуска фонового сервиса. BotBrowser повторяет разрешённый fixture, но не выдаёт разрешения и не превращает данные страницы в доверенный ввод.

Итог

Считайте content script изолированным JavaScript-миром с общим наблюдаемым DOM. Держите привилегии в расширении, проверяйте каждый мост и тестируйте frame и жизненный цикл.

Источники

#Расширения Браузера#Content Scripts#Изолированные Миры#Веб-Безопасность#Приватность

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

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