セキュリティ¶
このプロジェクトはブラウザー自動化ブリッジです。信頼済みコードを実行するインフラとして扱ってください。
管理された CDP セキュリティ¶
管理された CDP はデフォルトで無効になっています。これは任意の Chromium DevTools 制御を提供します、 簡略化されたブラウザーツールAPIではありません。信頼できるクライアントのみに有効にしてください。その機能は cloakbrowser_bridge_info.cdp.discoveryUrl はベアラー認証情報です:記録しないでください、 それをチケットに保存するか、セッション間で共有します。ブラウザを交換すると回転します そして古いURLは決して置き換え世代に移動しません。
ループバックでない CDP バインドには、--cdp-allow-remote と具体的に広告されたものの両方が必要です ホスト。公開されたポートの周りにネットワークアクセス制御を追加します。選択中 --cdp-advertised-scheme https は TLS を提供しません。管理されたリスナーと Chromium ホップは平文のままにする; オペレーター所有の同一ポート TLS ターミネーターは保持する必要がある 宣伝されている Host および Origin の権限と、それへの一対一のルーティングを維持する セッションを所有すること。
実行時のログには、能力パス、ターゲットID、CDPペイロード、ブラウザデータは一切含まれません、 クッキー、生の Host または Origin の値、またはプロファイルパス。拒否されたセキュリティチェックは 60秒でセッションスコープのcdp_security_rejections警告としてのみ報告された capability、host、originのカウントを飽和させる; クリーンアップは残っているものをフラッシュする カウントします。成功したチェックは、リクエストごとの監査記録を作成しません。
固定された制限¶
制限は、CDP対応の各MCPセッションに個別に適用されます:
| 境界 | 制限 |
|---|---|
| 進行中のハンドシェイクを含む、アクティブなプロキシ経由のWebSocket接続 | 8 |
| 同時事前アップグレード HTTP リクエスト | 16 |
| リクエストヘッダー | 16キロバイト |
| サポートされているルート上のリクエストボディ | 許可されていません |
| バッファリングされた Chromium HTTP 応答 | 4 MiB |
| 受信または送信のWebSocketメッセージ | 16 MiB |
| 方向ごとに送信されていないWebSocketデータをキューに登録しました | 16 MiB |
| リクエストヘッダー、アップストリーム HTTP レスポンス、または WebSocket ハンドシェイク | 10秒 |
| 強制終了前の優雅なプロキシシャットダウン | 5秒 |
| ローカルエラー応答本文 | 8キロバイト |
HTTP エラー¶
ローカルの障害は JSON {"error":{"code":"...","message":"..."}} を使用します Cache-Control: no-store、Content-Type: application/json; charset=utf-8、そして1つの 正確な 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 サーバーを認証なしのネットワークラッパー経由で公開しないでください。ツールを呼び出せるクライアントは、ブラウザーを操作し、ブラウザーから見えるページデータを読み取り、artifact を要求できます。
Streamable HTTP は既定でローカルクライアント向けに 127.0.0.1 へ HTTP で bind します。0.0.0.0 に bind したり loopback の外へ公開したりする場合は、CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN または同等の reverse proxy 認証を必須にし、CLOAK_PLAYWRIGHT_MCP_HTTP_PROTOCOL=https と TLS ファイルで直接 HTTPS を使うか、信頼できるネットワーク境界で TLS を終端し、信頼済みクライアントにアクセスを制限してください。
安全でないツール¶
Upstream Playwright MCP には browser_evaluate や browser_run_code_unsafe などのツールがあります。これらはブラウザーまたは Playwright server context で JavaScript を実行できます。このサーバーは信頼できる MCP クライアントにのみ接続してください。
webmcp_* ツールは現在のページが定義します。名前、説明、schema、annotations、output は信頼できないデータとして扱ってください。ブリッジはそのまま転送します。不要な場合は PLAYWRIGHT_MCP_WEBMCP=false を設定してください。
Playwright Extension token¶
PLAYWRIGHT_MCP_EXTENSION_TOKEN はプロセス環境またはシークレットマネージャーからだけ渡してください。ブリッジは HTTP metadata の token を受け付けず、config、bridge metadata、ログ、エラー、diagnostic snapshots に書き込みません。persistent profile を保護し、複数セッションで同じアクティブな userDataDir を再利用しないでください。
設定¶
アクセス制御とガードレールには upstream オプションを使用します:
PLAYWRIGHT_MCP_ALLOWED_ORIGINSPLAYWRIGHT_MCP_BLOCKED_ORIGINSPLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESSPLAYWRIGHT_MCP_SECRETS_FILE
これらは便利なガードレールですが、プロセス、コンテナ、ネットワーク、ファイルシステムの分離の代わりにはなりません。
可能な場合は信頼済みターゲットに allowlist を使用してください。無制限のファイルアクセスと secrets ファイルは機密能力として扱い、共有 MCP クライアントプロファイルには含めないでください。
Sandbox モード¶
Docker イメージは既定で CLOAK_PLAYWRIGHT_MCP_NO_SANDBOX=true を使用します。コンテナ化された CI と MCP runtime ではブラウザー sandboxing が利用できないことが多いためです。これは互換性上の妥協です。ホストとコンテナ runtime が Chromium sandboxing をサポートする場合は、次を設定してください:
Chromium sandbox なしで実行する場合は、Docker または別のプロセス分離境界を使い、広いホストディレクトリの mount を避けてください。
Artifact と secret¶
スクリーンショット、snapshot、download、ネットワークログ、コンソールログ、trace には認証情報や非公開ページ内容が含まれる可能性があります。必要な artifact ディレクトリだけを mount し、使用後に削除し、artifact bundle を公開しないでください。
MCP クライアントがブラウザーセッションへ認証情報を注入する場合は、対象サイトに限定された短命の認証情報を優先してください。長期 token をスクリーンショット、ネットワーク応答、永続ブラウザープロファイルに残さないでください。
Docker¶
Docker は分離と再現可能なブラウザー依存関係のために推奨されます。必要な成果物ディレクトリだけをマウントしてください。イメージにはすでに Tini が含まれており、ブラウザーの子プロセスを適切に回収します。強化された読み取り専用コンテナーでは /data をマウントしたままにし、headed セッションがあり得る場合は /tmp と /tmp/.X11-unix に書き込み可能な一時マウントを用意してください。
Docker から Streamable HTTP を公開する場合は、-p 127.0.0.1:3000:3000 を推奨します。公開インターフェースへ直接公開すると、認証とネットワーク制御を追加しない限り、到達可能な任意のクライアントがブラウザー自動化能力を得ます。
Docker イメージは CI と release 公開前に Trivy で scan されます。scanner は high と critical の OS/ライブラリ脆弱性を確認し、有効な場合は SARIF 結果を GitHub code scanning へ upload します。
Supply chain チェック¶
このリポジトリは無料の GitHub-native および open source チェックを使用します:
- JavaScript と TypeScript の静的解析に CodeQL。
- Pull request の依存関係変更に Dependency Review。
- runtime npm 依存関係に
npm audit --omit=dev --audit-level=high。 - リポジトリ supply-chain signal に OpenSSF Scorecard。
- GitHub Actions の security linting に zizmor。
- Docker イメージの脆弱性 scan に Trivy。
これらのチェックは、ブラウザー自動化挙動や release 変更の手動レビューを置き換えるものではありません。
報告¶
脆弱性は SECURITY.md で報告してください。