新闻详情

新闻详情

首页 / 资讯中心 / 详情

MCP Apps宿主沙箱实现:iframe sandbox属性与权限配置完整指南

发布时间:2026/9/18 21:24:43来源:尧图网络
MCP Apps宿主沙箱实现:iframe sandbox属性与权限配置完整指南
MCP Apps宿主沙箱实现iframe sandbox属性与权限配置完整指南【免费下载链接】ext-appsOfficial repo for spec SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers项目地址: https://gitcode.com/GitHub_Trending/ex/ext-appsMCP Apps 宿主沙箱Host Sandbox是 MCP Apps 协议安全体系的核心它通过iframe sandbox 属性、跨源双层 iframe 架构与权限白名单把不可信的应用 UI 安全地嵌入 AI 聊天界面。本文带你读懂这套沙箱机制的设计原理、sandbox 属性配置方式与权限allow 属性、CSP设置方法并附完整的关键源码文件路径。什么是 MCP Apps嵌入 AI 聊天窗的交互界面MCP Apps 是 模型上下文协议MCP 的一个扩展协议让 MCP 服务器不仅返回文本还能返回可交互的 UI 视图View——比如折线图、地图、PDF 查看器。这些视图通过 iframe 渲染在 Claude Desktop 等宿主Host的聊天流中本仓库是 MCP Apps 协议规范与官方 SDK 的所在地包含协议规范specification/2026-01-26/apps.mdx、TypeScript 运行时src/以及可运行的示例宿主examples/basic-host/。宿主沙箱架构为什么是“双层 iframe”设计规范明确要求当宿主是网页时必须用一层“Sandbox Proxy沙箱代理”包裹 View且宿主的源origin与沙箱的源必须不同。结构如下宿主页面 (Host) └─ 外层 iframeSandbox Proxy不同源如 localhost:8081/sandbox.html └─ 内层 iframeView渲染服务器返回的 HTMLsandbox 受限这样设计的原因很直接跨源隔离。即使应用 HTML 被恶意篡改它也拿不到宿主页面的 cookie、DOM 和本地存储而内外两层 iframe 因跨源无法直接通信就由沙箱代理充当双向消息中继只转发合法消息。上图是官方示例宿主 examples/basic-host/ 的运行界面下方即 View 渲染的沙箱区域。核心实现文件沙箱代理逻辑examples/basic-host/src/sandbox.ts宿主装载与握手逻辑examples/basic-host/src/implementation.ts代理页面壳examples/basic-host/sandbox.htmlsandbox 属性怎么配allow-scripts 与 allow-same-origin 的取舍浏览器给 iframe 提供的sandbox属性是一组开关白名单写了什么才允许什么默认全部禁用。规范对沙箱代理的要求见 specification/2026-01-26/apps.mdx 的 Sandbox proxy 章节要求说明必须允许allow-scriptsView 的 JavaScript 需要运行必须允许allow-same-origin沙箱页面本身需要正常源身份绝不允许allow-top-navigation等防止页面跳转逃逸出 iframe内层 iframe 可被覆盖宿主可通过sendSandboxResourceReady的sandbox参数定制更严策略官方示例中宿主在装载沙箱代理时这样设置examples/basic-host/src/implementation.tsiframe.setAttribute(sandbox, allow-scripts allow-same-origin allow-forms);而沙箱代理在创建内层 iframe真正渲染 View 的那一层时同样设置基础策略examples/basic-host/src/sandbox.tsinner.setAttribute(sandbox, allow-scripts allow-same-origin allow-forms); // allow 属性在收到 sandbox-resource-ready 通知后再按应用声明的权限设置值得注意的是sandbox-resource-ready消息里带有一个可选的sandbox字段内层 iframe sandbox 属性的可选覆盖值见 src/generated/schema.ts宿主可以据此为每个应用收紧或放开权限。内置安全自检验证沙箱真的生效沙箱代理启动时会主动做一次逃逸测试尝试访问window.top。在正确的沙箱下这会抛出SecurityError如果访问成功说明配置失守并立即终止examples/basic-host/src/sandbox.ts。这是验证沙箱配置是否安全的一个极简技巧写宿主时值得借鉴。权限配置allow 属性与设备权限白名单除sandbox外iframe 还有第二套机制——Permission Policy 的allow属性用于声明摄像头、麦克风等设备权限。MCP Apps 约定应用在资源元数据_meta.ui.permissions中声明所需权限宿主/沙箱再用 SDK 提供的buildAllowAttribute工具函数转换成 allow 字符串src/app-bridge.ts应用声明的权限生成的 allow 指令cameracameramicrophonemicrophonegeolocationgeolocationclipboardWriteclipboard-write沙箱代理收到sandbox-resource-ready通知后先按声明设置allow属性再把 HTML 用document.write写入内层 iframeexamples/basic-host/src/sandbox.ts。测试用例可参考 src/app-bridge.test.ts。网络权限的另一半CSP 配置沙箱只管行为网络请求则由Content Security PolicyCSP管控。MCP Apps 的 HTML 没有同源服务器所以应用必须在资源元数据_meta.ui.csp中声明全部允许的域名docs/csp-cors.mdconnectDomainsfetch / XHR / WebSocket 可访问的域名含开发时的 localhostresourceDomains脚本、样式、图片、字体来源未声明时沙箱会套用严格默认值如object-src none、frame-src none官方示例中宿主把 CSP 通过 URL 查询参数传给沙箱页面再由服务器以HTTP 响应头下发响应头比meta标签更难被篡改见 examples/basic-host/src/implementation.ts。下面这个地图应用就依赖connectDomainsresourceDomains从跨源加载瓦片与脚本完整示例见 examples/map-server/ 与 examples/sheet-music-server/。一次完整的沙箱握手流程把上面各环节串起来宿主打开一个 MCP App 的完整时序为宿主在不同源URL 上加载沙箱代理 iframe带上 CSP 参数沙箱代理自检通过后向宿主发送ui/notifications/sandbox-proxy-ready宿主读取 View 的 HTML 资源通过ui/notifications/sandbox-resource-ready发送 HTML、CSP 与权限声明沙箱代理设置allow属性并把 HTML 写入内层 iframe此后沙箱代理只做消息中继宿主 ↔ 沙箱 ↔ View逐跳校验 originView 完成ui/initialize握手后宿主才下发工具调用参数。相关 SDK 方法sendSandboxResourceReady与onsandboxreadysrc/app-bridge.ts。关键文件速查 想了解什么看哪里协议规范与沙箱代理要求specification/2026-01-26/apps.mdx沙箱代理完整实现examples/basic-host/src/sandbox.ts宿主加载沙箱与消息桥接examples/basic-host/src/implementation.ts权限 allow 属性构建工具src/app-bridge.tsCSP 与 CORS 配置指南docs/csp-cors.md从零构建第一个 MCP Appdocs/quickstart.md沙箱安全测试tests/e2e/security.spec.ts一句话总结MCP Apps 宿主沙箱 跨源双层 iframe隔离sandbox 属性白名单能力收敛allow/CSP 双通道授权按需放行三者叠加让把服务器 HTML 直接渲染进聊天窗口这件事真正变得安全可控。【免费下载链接】ext-appsOfficial repo for spec SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers项目地址: https://gitcode.com/GitHub_Trending/ex/ext-apps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

GateGeluQuant 算子深度解析:CANN ops-transformer 中 GeGLU 与 Per-Channel 量化融合 Kernel 的 Tiling 与实现原理 2026/9/18 22:36:53

GateGeluQuant 算子深度解析:CANN ops-transformer 中 GeGLU 与 Per-Channel 量化融合 Kernel 的 Tiling 与实现原理

GateGeluQuant 算子深度解析:CANN ops-transformer 中 GeGLU 与 Per-Channel 量化融合 Kernel 的 Tiling 与实现原理 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://git…

阅读更多 →
Jessibuca HLS 播放指南:M3U8 直播流与点播流的本质区别及播放器适配 2026/9/18 22:36:53

Jessibuca HLS 播放指南:M3U8 直播流与点播流的本质区别及播放器适配

Jessibuca HLS 播放指南:M3U8 直播流与点播流的本质区别及播放器适配 【免费下载链接】jessibuca Jessibuca是一款开源的纯H5直播流播放器 项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca M3U8 是 HTTP Live Streaming(HLS&#xf…

阅读更多 →
前端AES加解密实战:用crypto-js封装接口请求与响应加密 2026/9/18 22:36:53

前端AES加解密实战:用crypto-js封装接口请求与响应加密

做前端时间长了,你就会发现一个很现实的问题:接口返回的敏感数据,比如用户手机号、身份证、订单金额,一旦在传输层被拦截,基本就是明文裸奔。虽然业内默认 HTTPS 是标配,但标配不等于万能,尤其是…

阅读更多 →
从零基础到 Rust 并发:100 个练习带你走完全程的学习指南 2026/9/18 22:36:53

从零基础到 Rust 并发:100 个练习带你走完全程的学习指南

从零基础到 Rust 并发:100 个练习带你走完全程的学习指南 【免费下载链接】100-exercises-to-learn-rust A self-paced course to learn Rust, one exercise at a time. 项目地址: https://gitcode.com/GitHub_Trending/10/100-exercises-to-learn-rust 新手…

阅读更多 →
OpenHarmony与React Native实现3D卡片轮播实战 2026/9/18 22:36:53

OpenHarmony与React Native实现3D卡片轮播实战

1. OpenHarmony与React Native的3D卡片轮播实战在移动应用开发中,吸引眼球的交互效果往往能显著提升用户体验。3D卡片轮播作为一种高级UI组件,通过立体变换和流畅动画,让内容展示更具沉浸感。本文将基于OpenHarmony 6.0.0平台和React Native …

阅读更多 →
Python CatBoostRegressor回归实战:类别特征处理与调参上线 2026/9/18 22:33:53

Python CatBoostRegressor回归实战:类别特征处理与调参上线

回归任务里挑模型这件事,说简单也简单,说坑也多。很多教程一上来就甩一段CatBoostRegressor().fit(X, y),跑出来一个R2就收工,但你真把它放到带十几个高基数类别特征的业务数据上,会立刻发现两类问题:一是不…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞