Перайсці да зместа

Бяспека

Гэты праект — масток для аўтаматызацыі браўзера. Разглядайце яго як інфраструктуру для выканання даверанага кода.

Кіраваная бяспека 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. Ён запускае upstream Playwright MCP у якасці даччынага працэсу і перадае выклікі інструментаў. Аўтаматызацыя браўзера, вывад файлаў, сеткавы доступ і паводзіны пры небяспечнай ацэнцы рэгулююцца upstream 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 на даверным краі сеткі і абмяжоўвайце доступ да даверных кліентаў.

Небяспечныя інструменты

У рэпазіторый 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 рэкамендуецца для ізаляцыі і ўзнаўляльных залежнасцяў браўзера. Падключайце толькі патрэбны каталог артэфактаў; вобраз ужо ўключае 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.