WebMCP 工具安全性

Julia Pagnucco
Julia Pagnucco
Alexandra Klepper
Alexandra Klepper

发布时间:2026 年 6 月 9 日,上次更新时间:2026 年 9 月 1 日

说明类视频 Web 扩展程序 Chrome 状态 目的
GitHub 源试用 源试用 查看 Intent to Experiment

您可以使用 Web Model Context Protocol (WebMCP) 构建结构化工具并将其公开给在浏览器中运行的 AI 代理,包括由扩展程序提供支持的代理。代理使用大语言模型 (LLM)、规则、记忆和工具来代表用户执行操作。

由于 LLM 将所有文本、指令和用户数据视为单个令牌序列,因此它们容易受到间接提示注入(攻击者插入恶意指令)的攻击。我们的团队撰写了这篇关于工具安全性的文档,旨在帮助您保护自己的网站和用户免受不良分子的侵害。

虽然有些模型具有可应对提示注入的层,但无法保证大语言模型 (LLM) 内部的安全性。模型本质上是概率性的。请务必注意,针对使用最先进 LLM 的智能体系统的可重复提示注入攻击已经出现,并且网络攻击的普遍程度也在不断提高。

为了解决这些问题,我们针对使用 WebMCP 构建工具的开发者提供了初步的安全指南。

使用注释提示

构建工具时,您应添加一些提示:

  • 在适当的情况下使用 untrustedContentHint。如果某工具返回用户生成的内容 (UGC) 或外部来源的数据,请考虑向该工具添加 untrustedContentHint。此字段会明确将载荷标记为不受信任,以帮助保护网站的完整性,同时向代理提供信号,表明此数据需要高度审查。
  • 对于高风险或不可逆的操作,请使用 consequentialHint。如果执行工具会导致重大操作(例如预订行程或转账),请设置 consequentialHint: true,以便代理或浏览器在执行之前请求用户确认。
  • 在不更改状态的工具上使用 readOnlyHint。这样一来,代理就可以更好地决定何时要求用户确认。

谨慎公开您的工具

WebMCP document.modelContext.registerTool API 仅向智能体公开工具的功能。默认情况下,其他网站或跨源 iframe 无法观察或与您的工具互动。

您可以使用 registerTool 中的 exposedTo 选项,向一系列特定的安全来源授予对您的工具的访问权限。这样一来,当您的工具嵌入到相应来源的网站中时,以及当您的网站嵌入到相应来源的网站中时,您的工具就会向这些来源公开。

// https://partner.org

await document.modelContext.registerTool({
  name: 'my_shared_tool',
  description: 'Shared across origins',
  // ...
}, {
  exposedTo: ['https://trusted.com', 'https://example.com']
});

仅向您信任的来源公开您的工具。如果工具管理用户数据或以其他方式影响用户,这一点尤为重要。

  • 只读工具(例如 getFavoriteProducts)可能会泄露用户的信息。您只应向您会直接与之分享这些数据的网站公开这些工具。
  • 具有读写权限的工具会代表用户采取行动。这些工具应仅向您认为在代表用户行事时可信的来源公开。例如,您可能希望向 trustedExample.com 公开 postComment,但不希望向 evilExample.com 公开。

设置字符预算

为避免触发智能体保护措施,请编写简洁的工具说明和输出。我们建议您遵循以下字符数限制,以获得更好的效果:

  • 每个工具说明不能超过 500 个字符
  • 每个参数说明最多 150 个字符
  • 每个工具名称和参数名称最多 30 个字符
  • 每个工具输出的字符数上限为 1,500

不同客服人员的回答可能存在一些差异,您可能需要根据用户反馈调整字符预算。

后续步骤

我们将继续研究并致力于为代理化网络构建安全的基础设施。例如,各方正在就意见征求管理进行讨论,并且规范草稿包含 requestUserInteraction(),以便在工具执行时异步请求用户输入。

您打算如何在应用中实现 WebMCP?您还有其他疑虑(安全方面或其他方面)吗?如果您注册了 WebMCP 源试用,我们希望了解您的体验:

如果您要构建代理,建议您阅读 WebMCP 的代理安全性注意事项。