Перейти к содержанию

Безопасность

Этот проект представляет собой мост для автоматизации браузера. Рассматривайте его как инфраструктуру для выполнения доверенного кода.

Управляемая безопасность CDP

Управляемый CDP по умолчанию отключен. Он предоставляет произвольное управление DevTools Chromium, не уменьшенный браузер-инструмент API. Включайте его только для доверенных клиентов. Возможность в cloakbrowser_bridge_info.cdp.discoveryUrl является удостоверением носителя: не записывайте его, хранить это в билетах или делиться этим между сессиями. Оно изменяется после замены браузера и старый URL никогда не переходит в поколение замены.

Привязка CDP без обратной петли требует как --cdp-allow-remote, так и конкретного объявления хост. Добавьте сетевые средства контроля доступа вокруг опубликованного порта. Выбор --cdp-advertised-scheme https не предоставляет TLS. Управляемый слушатель и Chromium hop остаётся в открытом виде; терминатор TLS, принадлежащий оператору на том же порту, должен сохранять рекламируемую авторизацию Host и Origin и поддерживать однонаправленную маршрутизацию к владеющая сессия.

Журналы выполнения никогда не включают пути возможностей, идентификаторы целей, полезные нагрузки CDP, данные браузера, куки, необработанные значения Host или Origin, или пути профиля. Отклоненные проверки безопасности сообщается только как предупреждение cdp_security_rejections с областью действия сеанса с 60-секундным насыщающие подсчёты для capability, host и origin; очистка сбрасывает оставшееся считается. Успешные проверки не создают записи аудита для каждого запроса.

Фиксированные ограничения

Ограничения применяются независимо к каждой сессии CDP с включённой поддержкой MCP:

Граница Предел
Активные проксированные соединения WebSocket, включая выполняющиеся рукопожатия 8
Одновременные запросы HTTP перед обновлением 16
Заголовки запроса 16 КиБ
Тело запроса на поддерживаемых маршрутах Не разрешено
Буферизированный ответ Chromium HTTP 4 МБ
Входящее или исходящее сообщение WebSocket 16 МБ
Поставлены в очередь несообщенные данные WebSocket по направлению 16 МБ
Заголовки запроса, ответ верхнего уровня HTTP или рукопожатие WebSocket 10 секунд
Плавное завершение работы прокси перед принудительным закрытием 5 секунд
Тело ответа с локальной ошибкой 8 КБ

Ошибки HTTP

Локальные ошибки используют JSON {"error":{"code":"...","message":"..."}} с Cache-Control: no-store, Content-Type: application/json; charset=utf-8 и один точно Content-Length. Сбои методов также включают Allow. Стабильные отображения:

Статус Код
400 bad_request
403 forbidden
404 not_found
405 method_not_allowed
408 request_timeout
413 payload_too_large
431 headers_too_large
500 internal_error
502 bad_gateway
503 unavailable
504 gateway_timeout
Chromium 400..499 upstream_error, сохранение статуса

Chromium перенаправляет, ошибки сервера, некорректные ответы и сбои передачи данных являются нормализован вместо того, чтобы раскрывать тела ответов Chromium. Отклонение, сгенерированное мостом перед отправкой вверх по потоку нет побочного эффекта Chromium. Запрос на обнаружение только для чтения может повторить попытку после исправления условия. Для неясных сбоев, изменяющих состояние, перечитайте /json/list и согласуйте состояние приложения; не предполагается Retry-After или автоматическая идемпотентность.

WebSocket Закрывает

Локально сгенерированные закрытия используют фиксированные скрытые пары. Действительные закрытия пиров передаются.

Код Причина Использовать
1001 going_away Завершение сеанса, генерации или прокси
1002 protocol_error Некорректный ввод протокола WebSocket
1009 message_too_big Сообщение превышает установленный лимит
1011 internal_error Неожиданное отключение на стороне источника или сбой ретрансляции
1013 try_again_later Превышен лимит очереди неподанных сообщений по направлению

Граница доверия

Внешний сервер поддерживает stdio и Streamable HTTP. Он запускает основной компонент Playwright MCP в качестве дочернего процесса и перенаправляет вызовы инструментов. Автоматизация браузера, вывод файлов, доступ к сети и поведение при небезопасной оценке регулируются основным компонентом Playwright MCP.

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

По умолчанию Streamable HTTP подключается к 127.0.0.1 по протоколу HTTP для локальных клиентов. Если вы привязываете его к 0.0.0.0 или публикуете его за пределами loopback, требуйте CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN или эквивалентную аутентификацию обратного прокси, используйте прямой HTTPS с CLOAK_PLAYWRIGHT_MCP_HTTP_PROTOCOL=https и файлами TLS или завершайте TLS на границе доверенной сети, а также ограничьте доступ доверенным клиентам.

Небезопасные инструменты

Upstream Playwright MCP включает такие инструменты, как browser_evaluate и browser_run_code_unsafe. Они позволяют выполнять JavaScript в браузере или в контексте сервера Playwright. Подключайте этот сервер только к тем клиентам MCP, которым вы доверяете.

Инструменты webmcp_* определяются текущей страницей. Считайте их имя, описание, schema, annotations и output недоверенными данными; мост передаёт их без изменений. Отключите сбор через PLAYWRIGHT_MCP_WEBMCP=false, если он не нужен.

Token Playwright Extension

Передавайте PLAYWRIGHT_MCP_EXTENSION_TOKEN только через окружение процесса или менеджер секретов. Мост не принимает token в HTTP metadata и не пишет его в config, bridge metadata, логи, ошибки или diagnostic snapshots. Защищайте persistent profile и не используйте один активный userDataDir в нескольких сессиях.

Настройка

Используйте опции на верхних уровнях для управления доступом и защиты:

  • PLAYWRIGHT_MCP_ALLOWED_ORIGINS
  • PLAYWRIGHT_MCP_BLOCKED_ORIGINS
  • PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
  • PLAYWRIGHT_MCP_SECRETS_FILE

Это защитные меры для удобства, которые не заменяют изоляцию процессов, контейнеров, сетей и файловых систем.

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

Режим «песочницы»

По умолчанию для образа Docker используется значение CLOAK_PLAYWRIGHT_MCP_NO_SANDBOX=true, поскольку в контейнерных средах выполнения CI и MCP функция «песочницы» браузера зачастую недоступна. Это компромисс, обусловленный необходимостью обеспечения совместимости. Если ваша среда выполнения на хосте и в контейнере поддерживает песочницу Chromium, установите:

CLOAK_PLAYWRIGHT_MCP_NO_SANDBOX=false

При запуске без песочницы Chromium используйте Docker или другой механизм изоляции процессов и избегайте монтирования обширных каталогов хоста.

Артефакты и секреты

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

Если ваш MCP-клиент вставляет учетные данные в сеансы браузера, отдавайте предпочтение краткосрочным учетным данным, действующим только на целевом сайте. Не размещайте долгосрочные токены на скриншотах, в сетевых ответах или в постоянных профилях браузера.

Docker

Docker рекомендуется для изоляции и воспроизводимых зависимостей браузера. Подключайте только нужный каталог артефактов; образ уже содержит Tini, который корректно завершает дочерние процессы браузера. В усиленном контейнере только для чтения оставьте /data подключённым и предоставьте доступные для записи временные монтирования /tmp и /tmp/.X11-unix, если возможны headed-сеансы.

При публикации Streamable HTTP из Docker рекомендуется использовать -p 127.0.0.1:3000:3000. Публикация непосредственно на общедоступный интерфейс предоставляет любому доступному клиенту возможность автоматизации браузера, если не добавить средства аутентификации и сетевого контроля.

Образ Docker проходит сканирование с помощью Trivy в рамках непрерывной интеграции (CI) и перед публикацией релиза. Сканер проверяет уязвимости ОС и библиотек с высоким и критическим уровнем риска и, если эта функция включена, загружает результаты в формате SARIF в систему сканирования кода GitHub.

Проверки цепочки поставок

В репозитории используются бесплатные встроенные в GitHub средства проверки с открытым исходным кодом:

  • CodeQL для статического анализа кода на JavaScript и TypeScript.
  • Dependency Review для проверки изменений зависимостей в пул-реквестах.
  • npm audit --omit=dev --audit-level=high для зависимостей npm, используемых во время выполнения.
  • OpenSSF Scorecard для отслеживания сигналов о цепочке поставок репозитория.
  • zizmor для проверки безопасности GitHub Actions.
  • Trivy для сканирования образов Docker на наличие уязвимостей.

Эти проверки не заменяют ручной анализ поведения средств автоматизации браузера или изменений в релизах.

Отчетность

Сообщайте об уязвимостях с помощью файла SECURITY.md.