连接模型上下文协议服务器赋予智能体执行能力,同时也为陌生人提供了入侵途径。

发布日期:2026-06-21 10:00:21   浏览量 :6
发布日期:2026-06-21 10:00:21  
6

当你连接一个模型上下文协议服务器的那一刻,你的编码代理就不再只是一个在你的代码仓库中读取和写入的工具,而变成了一个能够向外延伸并采取行动的主体。它可以读取数据库、调用应用程序接口、接触服务、拉取网页。这正是其全部吸引力所在。然而,这也正是全部问题所在,这两者其实是同一特性的一体两面。

在我为自己的插件工作配置工具的过程中,我经历了这一过程。让我避免犯下更严重错误的,是我曾经吸取的一个教训。此前,我曾发布过一个人工智能聊天机器人,当时我将模型的输出直接渲染到页面上,结果遭受了超文本标记语言注入漏洞的攻击。那次经历让我刻骨铭心地学会了一条规则:大型语言模型返回的任何内容都是不可信的输入。模型上下文协议将这一教训的影响范围扩大了,因为现在不可信的因素不仅仅是我的模型生成的文本,还包括任何已连接服务器决定返回的内容。

两种不同的恐惧,而人们只关注其中一种

当人们谈论代理安全时,他们几乎总是在问:如果代理执行了破坏性操作怎么办?比如删除文件、强制推送代码、或者通过命令行工具访问它不该访问的内容。这种担忧是真实的,并且有一个切实的解决方案,我稍后会谈到。

但这只是威胁的一半,而且是可见的那一半。另一半则更为隐蔽:如果代理相信了它不该相信的内容怎么办?模型上下文协议服务器返回一个应用程序接口响应、一行数据库记录、一个问题描述正文或一封电子邮件线程,而在这些返回的内容中,可能有一行文字读起来像是一条指令。模型没有可靠的方法来区分你的指令和数据中包含的文本。对它来说,它们来自同一个渠道。因此,危险不仅在于代理执行的命令,还在于它被通过工具返回的内容诱骗去执行的命令。

这是两个独立的问题,需要两种独立的防御措施。大多数设置只安装了一种防御措施,并自以为万无一失。

输出端:将每个工具返回视为表单字段

这是我从聊天机器人漏洞中吸取的规则。无论模型上下文协议服务器返回什么,其信任等级都与陌生人在你网站表单中输入的字符串完全相同。它不是“来自我的工具的数据”,而是来自外部、恰好通过我的工具到达的数据。

这种视角的转变会改变你的处理方式。你不会将工具的原始输出直接传递给下一个命令的参数。你不会在未进行转义的情况下将其渲染到屏幕上。你也不会让埋藏在返回文档中的祈使句悄悄变成代理视为指令的内容。输出是需要检查的有效载荷,而不是值得信任的值,而且它来自你连接的服务器这一事实并不能使其变得可信。你连接了管道,但并未为流经管道的一切内容背书。

这是工具无法为你完成的一半工作,因为它做不到。没有任何沙盒标志能知道返回的字符串是合法的应用程序接口结果还是植入的指令。这种判断取决于你如何连接数据,而不在于某个设置。

行动端:依靠围墙,而非礼貌

另一半,即对破坏性命令的恐惧,确实有一个基于设置的答案,而且值得将其完全做对,因为这很容易只做一半。

恳请模型不要运行危险内容是出于礼貌,而一旦输入内容诱骗它执行某些操作,礼貌就会被绕过。你需要的是围墙。在克劳德代码中,这就是沙盒:开启它后,巴什脚本的执行将在操作系统层面被隔离,代理生成的每个子进程都会继承这种限制。在苹果系统上是安全带机制,在林纽斯系统和微软子系统2上则是气泡包装机制。

// .claude/settings.json
{
  

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据