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