资讯动态

MCP Apps 默认安全设计:为什么“不声明即禁止“是嵌入AI聊天UI的终极答案?

发布时间:2026/9/18 22:04:22 来源:尧图企业网站定制
MCP Apps 默认安全设计为什么不声明即禁止是嵌入AI聊天UI的终极答案【免费下载链接】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 是 Model Context ProtocolMCP的官方扩展协议与 SDK让 MCP 服务器能够向 AI 聊天应用如 Claude、ChatGPT内嵌交互式 UI。它的核心安全理念是默认安全设计不声明即禁止——应用每一点网络访问、每一项设备权限都必须预先显式声明否则一律被宿主Host拒绝。本文将带你快速理解这套连接策略的价值。为什么不声明即禁止如此重要当 AI 聊天客户端嵌入来自各个 MCP 服务器的 UI 时它面对的其实是不可信的内容。官方规范明确列出了威胁模型恶意服务器投递有害 HTML、被攻破的 UI 尝试逃逸沙箱、UI 未授权调用工具、UI 外泄宿主敏感数据、钓鱼与社会工程攻击。应对方式不是事后拦截而是默认拒绝deny by default未声明域名的网络请求 → 直接被 Content Security PolicyCSP阻断未声明的设备权限摄像头、麦克风、地理位置→ iframe 的allow属性中不存在浏览器层面就拒绝未完成的 OAuth 授权 → 受保护工具直接返回401请求根本到不了业务逻辑这种策略的价值在于安全边界由声明决定而非由开发者记得写拦截代码决定。漏写的代码是漏洞漏写的声明只是功能缺失——后者远比前者安全。四层安全架构从规范中看实现1. 强制 Iframe 沙箱规范要求所有 View 内容MUST必须渲染在带受限权限的沙箱 iframe 中所有与宿主的通信都走postMessage且由宿主掌控。双 iframe 结构Sandbox Proxy 内层 iframe进一步隔离了不可信 HTML。参考宿主实现可见于 examples/basic-host/src/sandbox.ts。2. 默认全拒绝的 CSP 构建这是不声明即禁止最直接的体现。规范中宿主构建 CSP 的模板以default-src none开头每一项资源都只有两类来源self或你在元数据里显式声明的域名default-src none; connect-src self /* connectDomains */ frame-src none /* 除非声明 frameDomains */ object-src none;关键安全要求写在规范 Security Implications 一节specification/2026-01-26/apps.mdxHost MUST block connections to undeclared domains—— 宿主必须阻断到未声明域名的连接。也就是说你的应用不填connectDomains就一次外部请求也发不出去。3. 设备权限同样未声明即禁用permissions元数据映射到 iframe 的allow属性只有声明了camera才推入camera声明了microphone才允许麦克风。没写 没有权限浏览器直接拒绝调用。4. 可审计的双向通信所有 View 到宿主的通信都走可审计的 MCP JSON-RPC 消息宿主验证每一条入站消息、拒绝畸形类型、并可记录 UI 发起的 RPC 调用用于安全审查。通信层 SDK 见 src/app-bridge.ts。实操指南如何声明应用需要的连接域名如果你的 MCP App 需要调用外部 API在 UI 资源的_meta.ui.csp中声明即可详见 docs/csp-cors.md_meta: { ui: { csp: { connectDomains: [https://api.example.com], // fetch/XHR/WebSocket }, domain: APP_DOMAIN, // 可选给 API 服务器的稳定 Origin用于 CORS 白名单 }, }两个容易踩的坑开发环境的localhost也要声明——本地调试时同样适用不声明即禁止公网 API 若返回Access-Control-Allow-Origin: *或使用 API Key 认证则无需配置domain只有需要 CORS 白名单的 API 才需要稳定 Origin完整配置示例可参考 examples/sheet-music-server 与 examples/map-server。进阶用 OAuth 为工具加锁不声明即禁止不止用于网络也延伸到授权。MCP Apps 支持两种模式详见 docs/authorization.md模式行为适用场景按服务器授权连接即校验所有请求必须携带有效 Token全部工具都敏感按工具授权仅受保护工具触发 OAuth 流程公共工具直接放行公共/敏感工具混合更精妙的模式是UI 发起的授权升级应用先以公共数据加载无登录墙用户点击敏感操作时宿主才透明地完成 OAuth 流程并带 Token 重试。体验快安全边界清晰。如何验证端到端安全测试仓库内置了 Playwright 安全测试 tests/e2e/security.spec.ts对真实运行的示例服务器验证沙箱与权限行为可作为你自己宿主实现的安全基线参考。总结默认拒绝带来的三重收益对宿主开发者安全逻辑收敛为一条规则——元数据没写的一律拒绝无需为每个应用写拦截代码对应用开发者安全声明集中在资源元数据一处声明即文档边界一目了然对最终用户嵌入在 AI 对话中的 UI 被限制在一个最小权限的沙箱里即使服务器被攻破攻击面也被 CSP 沙箱 权限白名单层层封死想动手体验按 docs/quickstart.md 克隆仓库后执行npm install npm start仓库地址git clone https://gitcode.com/GitHub_Trending/ex/ext-apps打开 http://localhost:8080/ 即可在参考宿主中浏览全部示例。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价