Skip to content

MCP 安全与信任

通过 MCP 将大型语言模型(LLM)与外部工具和数据源集成时,安全性至关重要。本章概述了关键的安全注意事项、MCP 信任模型以及确保安全可靠运行的最佳实践。

MCP 在设计时考虑了以下核心安全原则:

用户必须明确控制 MCP 服务器可以访问哪些数据以及代表他们调用哪些工具。同意应是细粒度且清晰呈现的。用户应能轻松审查和撤销权限。

通过 MCP 交换的数据,特别是通过资源访问或在提示中使用的敏感信息,必须受到保护。这包括传输中的数据(例如,使用 TLS)和适用的静态数据。应尽量减少个人身份信息(PII)的收集和暴露。

MCP 服务器暴露的工具可以执行操作。至关重要的是,要确保这些工具在明确定义的边界内运行,并且不会带来意外后果的风险。这包括仔细设计工具功能、输入验证以及清晰记录其效果。

当 MCP 用于向 LLM 提供上下文时,控制 LLM 如何采样或使用此上下文非常重要。虽然 MCP 方便了上下文的提供,但管理 LLM 交互的客户端或宿主应用程序应实施防护措施,以防止 LLM 在其响应中滥用或泄露敏感上下文信息。

遵循这些指南将帮助您构建安全的 MCP 集成:

实施清晰且可审计的同意机制。在 MCP 客户端能够访问资源或调用需要权限的工具之前,服务器(或管理宿主)必须获得用户的明确批准。OAuth 2.0 或类似的授权框架可以用于管理 MCP 服务器的访问令牌和范围(scope)。

对于每个 MCP 服务器,特别是其暴露的每个工具,都应记录其潜在的安全影响。它访问哪些数据?可以执行哪些操作?如果被滥用存在哪些风险?这有助于用户和客户端开发人员做出明智的决定。

服务器必须严格执行访问控制。只有经过身份验证和授权的客户端才能访问敏感资源或执行特权工具。应采用标准数据保护技术,例如对传输中的数据进行加密 (HTTPS/WSS),并考虑对服务器存储的敏感静态数据进行加密。

风险: 如果客户端用于与 MCP 服务器认证的访问令牌被泄露,攻击者可以冒充用户并访问其数据或工具。

缓解措施:

  • 使用短生命周期的令牌并配备刷新机制。
  • 安全存储令牌(例如,使用系统钥匙串服务)。
  • 仅通过加密通道(TLS)传输令牌。
  • 实施令牌撤销功能。

风险: 攻击者入侵 MCP 服务器本身,从而获得对其配置、底层数据源的访问权限或修改其行为的能力。

缓解措施:

  • 在开发服务器时遵循安全编码实践。
  • 保持服务器软件和依赖项处于最新状态。
  • 以最小必要权限运行服务器。
  • 实施强大的日志记录和监控以检测可疑活动。
  • 定期审计服务器配置和代码。

风险: 恶意构造的输入(可能来自用户或输入到提示中的外部数据源)导致 LLM(或基于 LLM 输出通过 MCP 调用的工具)执行非预期或有害的操作。

缓解措施:

  • 清理和验证提示中使用的所有输入,特别是那些构成工具参数或数据库查询的输入。
  • 为工具使用结构化输入格式,而不是依赖 LLM 生成任意代码或命令。
  • 在提示中清晰地划分指令、上下文和用户输入。
  • 在将 LLM 输出用于调用工具之前,实施严格的解析和验证。
  • 如果用户正在编写复杂的提示,请对他们进行提示注入风险的教育。

风险: MCP 服务器或其中的特定工具被授予了超出其功能所需的权限,如果被入侵或滥用,会增加潜在的损害。

缓解措施:

  • 遵守最小权限原则。只为每个资源提供者和工具授予最低限度的必要权限。
  • 实施细粒度的权限范围,用户可以单独批准。
  • 定期审查和审计授予服务器及其组件的权限。