原则
插件工具可以访问用户数据、调用第三方 API 并执行写入操作。请将每个 MCP 服务器和 UI 组件都视为生产软件:
- 最小权限: 仅请求所需的授权范围、存储访问权限和网络权限。
- 用户明确同意: 确保用户在关联账户 或授予写入权限时清楚自己正在进行的操作。对于破坏性操作, 请使用主机的确认提示。
- 纵深防御: 假定您的服务器会收到提示注入和恶意输入。检查每项输入并保留审计日志。
数据处理
- 结构化内容: 仅包含当前提示所需的数据。避免在组件属性中嵌入密钥或 Token。
- 存储: 确定用户数据的保留时长,并公布保留政策。尊重用户的删除请求。
- 日志记录: 写入日志前,先对个人身份信息(PII)进行脱敏处理。存储关联 ID 以便调试,但除非必要,否则不要存储原始提示文本。
提示注入与写入操作
开发者模式提供完整的 MCP 访问权限,包括使用写入工具的权限。请通过以下方式降低风险:
- 定期审查工具描述,避免误用(例如注明“请勿用于删除记录”)。
- 在服务器端验证所有输入,即使输入由模型提供也不例外。
- 要求对不可逆操作进行人工确认。
与您的质量保证团队分享最有效的注入测试提示,帮助他们尽早发现薄弱环节。
网络访问
小组件在隔离的 iframe 中运行,并受严格的内容安全策略约束。
它们无法访问需要特权的浏览器 API,例如 window.alert、
window.prompt、window.confirm 或 navigator.clipboard。CSP 控制
标准 fetch 请求。默认情况下无法使用嵌套框架;请通过
资源 CSP 元数据(例如
_meta.ui.csp.frameDomains)启用特定源。插件可以嵌入其 MCP 服务器
自身可注册域名下的页面,包括现有的编辑器和管理界面。有关
域名所有权、必须提供的理由和审查要求,
请参阅 iframe 策略。
小组件的 CSP 限制了 iframe 可以加载哪些目标页面。嵌入的页面
使用自身的 CSP;小组件的 connectDomains 和 resourceDomains
允许列表不会限制在该页面内发起的网络请求。请为 iframe 指定
具体的源,并将嵌入式体验纳入您的安全审查。
服务器端代码仅受托管环境所施加的网络限制。对于出站调用,请遵循常规最佳实践(TLS 验证、重试、超时)。
身份验证与授权
- 集成外部账户时,请使用 OAuth 2.1 授权码流程。
当您的授权服务器支持 CIMD,
且插件构建者选择使用它时,优先使用客户端 ID 元数据文档(CIMD)。公共客户端进行 Token 交换时使用
none; 如果您的授权服务器要求客户端身份验证, 则使用private_key_jwt。当插件构建者选择 DCR 或 CIMD 不可用时,应支持 DCR。 - 每次工具调用都要验证授权范围并强制执行其限制。对于已过期或格式错误的 Token,返回
401响应。 - 使用内置身份机制时,避免存储长期有效的密钥;请改用所提供的身份验证上下文。
运维准备
- 上线前进行安全审查,尤其是在处理受监管数据时。
- 监控异常流量模式,并为反复出现的错误或身份验证失败尝试设置告警。
- 及时为第三方依赖项、库和构建工具安装补丁,以降低供应链风险。
安全与隐私是用户信任的基础。请将它们融入规划、实现和部署工作流程,而不是等到最后才考虑。