Перейти до змісту

Безпека

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

Управління безпекою CDP

Керований CDP за замовчуванням вимкнено. Він надає довільний контроль Chromium DevTools, не зменшений інструмент браузера API. Увімкніть його лише для надійних клієнтів. Можливість у cloakbrowser_bridge_info.cdp.discoveryUrl є обліковим даним носія: не реєструйте його, зберігайте це в квитках або діліться між сесіями. Він обертається після заміни браузера і старий URL ніколи не переходить у покоління заміни.

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

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

Фіксовані обмеження

Обмеження застосовуються окремо до кожної сесії MCP з увімкненим CDP:

Межа Обмеження
Активні проксійовані підключення WebSocket, включаючи поточні рукопотискання 8
Паралельні запити на передпідготовку HTTP 16
Заголовки запиту 16 КБ
Тіло запиту на підтримуваних маршрутах Не дозволено
Буферизована відповідь Chromium HTTP 4 МіБ
Вхідне або вихідне повідомлення WebSocket 16 МБ
Черга непереданих даних WebSocket за напрямком 16 МБ
Заголовки запиту, відповідь upstream 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 для перевірки змін у залежностях у pull-запитах.
  • npm audit --omit=dev --audit-level=high для залежностей npm, що використовуються під час виконання.
  • OpenSSF Scorecard для аналізу сигналів ланцюга постачання репозиторіїв.
  • zizmor для перевірки коду на безпеку в GitHub Actions.
  • Trivy для сканування образів Docker на наявність вразливостей.

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

Звітність

Повідомляйте про вразливості за допомогою SECURITY.md.