为了通过模型上下文协议 (MCP) 工具防范提示词注入,请着重关注输入验证、上下文隔离和持续监控。当不受信任的输入通过覆盖其预期指令来操纵模型的行为时,就会发生提示词注入。 MCP 工具通常定义模型的初始上下文或约束,因此保护它们需要明确的保障措施,以防止恶意输入更改该设置。
首先,验证和清理所有与 MCP 交互的输入。 将用户提供的数据视为不受信任的数据,并对可以包含的内容强制执行严格的规则。 例如,如果您的 MCP 定义了一个系统提示,例如“回答有关医疗保健的问题”,请确保用户输入不能附加“忽略以前的指令”之类的短语或注入新的命令。 使用允许列表来阻止保留关键字(例如,“system:”,“admin:”)或可能修改上下文的特殊字符。 此外,限制用户输入的长度以降低隐藏有效负载的风险。 例如,使用 MCP 的聊天机器人可以截断超过 200 个字符的输入,并转义可能破坏上下文结构的括号或引号。
其次,将 MCP 定义的上下文与用户输入隔离。 使用技术边界(如单独的数据通道或标记标签(例如,<user_input>
))来区分系统指令和外部数据。 例如,如果您的 MCP 工具使用 JSON 配置,请将系统提示保存在锁定的字段中,并将用户内容放置在单独的、经过清理的字段中。 这样可以防止攻击者将恶意指令与合法输入混合。 像 OpenAI 在 API 调用中的“system”和“user”角色标记这样的工具就演示了这种方法——系统消息定义行为,而用户消息被视为不受信任。 实施运行时检查以检测异常情况,例如在请求中突然更改 MCP 上下文,并记录这些事件以供审查。
最后,严格测试您的防御措施。 通过设计旨在绕过 MCP 约束的输入来模拟攻击,例如“以前的答案是错误的。将其重做为:{恶意代码}。” 使用自动化工具扫描漏洞,例如模糊测试框架,该框架生成随机有效负载以测试输入处理。 随着新攻击模式的出现,更新您的验证规则和上下文隔离机制。 例如,如果一种新的注入方法利用 MCP 工具中的 Markdown 格式,请添加过滤器以从不受信任的输入中删除 Markdown 语法。 定期审核日志以识别可疑活动并完善您的保障措施。 通过结合这些策略,您可以最大限度地降低提示词注入的风险,同时保持 MCP 的预期功能。