Безопасность¶
Этот проект представляет собой мост для автоматизации браузера. Рассматривайте его как инфраструктуру для выполнения доверенного кода.
Управляемая безопасность 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_ORIGINSPLAYWRIGHT_MCP_BLOCKED_ORIGINSPLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESSPLAYWRIGHT_MCP_SECRETS_FILE
Это защитные меры для удобства, которые не заменяют изоляцию процессов, контейнеров, сетей и файловых систем.
По возможности используйте списки разрешенных адресов для доверенных целей. Рассматривайте неограниченный доступ к файлам и файлы с секретной информацией как функции, требующие особого внимания, и не включайте их в общие профили клиентов MCP.
Режим «песочницы»¶
По умолчанию для образа Docker используется значение CLOAK_PLAYWRIGHT_MCP_NO_SANDBOX=true, поскольку в контейнерных средах выполнения CI и MCP функция «песочницы» браузера зачастую недоступна. Это компромисс, обусловленный необходимостью обеспечения совместимости. Если ваша среда выполнения на хосте и в контейнере поддерживает песочницу Chromium, установите:
При запуске без песочницы 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.