Безпека¶
Цей проєкт є мостом для автоматизації роботи браузера. Розглядайте його як інфраструктуру для виконання надійного коду.
Управління безпекою 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_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 для перевірки змін у залежностях у pull-запитах.
npm audit --omit=dev --audit-level=highдля залежностей npm, що використовуються під час виконання.- OpenSSF Scorecard для аналізу сигналів ланцюга постачання репозиторіїв.
- zizmor для перевірки коду на безпеку в GitHub Actions.
- Trivy для сканування образів Docker на наявність вразливостей.
Ці перевірки не замінюють ручний аналіз поведінки автоматизованих процесів у браузері або змін у версіях.
Звітність¶
Повідомляйте про вразливості за допомогою SECURITY.md.