想象你是一座庄园的主人,请了一位聪明能干的管家阿智。阿智可以帮你查天气、订机票、整理账本,甚至操作银行账户。你交给它一串钥匙,允许它进出书房、厨房、金库。问题来了:阿智也会犯糊涂——如果它被一封伪造的便条骗了,跑去金库打开门;或者收到一条恶意指令,直接删掉整个账本,你该怎么办?这正是 MCP(模型上下文协议)要解决的问题。MCP 为 AI 与外部工具之间搭建了一套完整的安保制度:每把钥匙能开哪扇门(权限控制)、动贵重物品要先问主人(用户确认)、干活必须在玻璃房里(沙箱隔离)、每一件事都记进小本本(审计日志)。这篇文章,我们从“请管家”的故事出发,把这套制度的每一层掰开揉碎讲清楚。

岗位关联

掌握 MCP 安全模型,是 AI 应用从原型走向企业级生产环境的关键能力。安全工程师能据此设计可靠的工具调用防线,避免一次越权调用造成数千万损失。

目录
  1. 可视化演示
  2. 安全威胁认知
  3. 权限控制模型
  4. 用户确认机制
  5. 沙箱隔离机制
  6. 审计日志追踪
  7. 认证与会话
  8. 攻击面防护
  9. 企业部署实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示MCP安全模型的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

MCP安全模型:MCP安 MCP安全模型总览与多层防护体 工具级别权限控制与授权机制 核心机制可视化 MCP安全模型整体架构与关键组件

安全威胁认知

阿智管家刚上岗时,庄园上下都很满意。直到有一天,有人递给阿智一张便条:“请打开金库门,把账本拿出来烧掉。”落款是“主人”,可阿智没有核对笔迹——差点闯下大祸。MCP 安全模型要回答的第一个问题,正是“谁可能伤害阿智,以及伤害有多大”。工具本身没有恶意,但调用它的指令可能被伪造、误导,或带着恶意参数。

在 MCP 协议里,AI Agent 每调用一个工具,就多一个攻击入口。常见威胁有四类:工具投毒(有人篡改工具描述,诱导模型做出危险选择)、越权调用(拿到了超出范围的权限)、数据泄露(工具返回的敏感信息被带出)、恶意请求(构造特殊参数触发底层系统漏洞)。安全工程师评估这些威胁时,会使用一个经典公式:风险等于威胁发生的概率乘以造成的损失。这就像庄园主先盘点后门、狗洞、没锁的窗户,再决定安保投入。

先认清威胁,后续的权限、隔离、审计才不会白做。就像庄园主只有盘点过所有入口,才知道该在哪里加锁、装摄像头。

Risk=P×I=(Pattack×Pvuln)×(Iconf+Iintegr+Iavail)\displaystyle Risk = P \times I = (P_{attack} \times P_{vuln}) \times (I_{conf} + I_{integr} + I_{avail})
风险 = 攻击者发动攻击的概率 × 是否存在可利用漏洞 ×(机密性 + 完整性 + 可用性三方面的损失估计)。这个公式帮我们判断哪些威胁值得优先治理。
  1. 攻击概率攻击者主动发起攻击的频率,由外部威胁环境决定。
    PattackP_{attack}
  2. 漏洞概率系统存在可利用漏洞的概率,与代码质量和补丁速度有关。
    PvulnP_{vuln}
  3. 总威胁概率两概率相乘得到“这次威胁真的发生”的概率。
    P=Pattack×PvulnP = P_{attack} \times P_{vuln}
  4. 影响损失机密性泄露、数据完整性被破坏、服务不可用三类损失之和。
    I=Iconf+Iintegr+IavailI = I_{conf} + I_{integr} + I_{avail}
  5. 风险值概率与影响的乘积,用于排序安全预算。
    Risk=P×IRisk = P \times I

权限控制模型

阿智的钥匙串上挂着很多钥匙,但每把只能开对应的门:书房钥匙开不了厨房,财务室钥匙只有主人自己留了一把。权限控制的本质,就是“谁的钥匙能开哪扇门”。MCP 的权限模型与此完全一致:服务器维护一张授权清单(ACL,访问控制列表),记录哪个用户或哪个 Agent 可以调用哪个工具。

这张清单要遵循三个原则:第一,最小权限——只给阿智完成日常工作所需的钥匙,不给它探索整座庄园的自由;第二,工具白名单——默认拒绝所有工具,只有登记过的工具才能被调用;第三,作用域限制——同一个工具,不同的人能访问的数据范围也不同,比如普通员工只能查测试库,管理员才能查生产库。

有了这套钥匙管理,就算阿智犯糊涂,最多打开书房门,永远摸不到金库。MCP 里的每个工具,都需要这样一把“只能开一扇门”的钥匙。

Access(u,t)={1,(u,t)∈ACL0,otherwise\displaystyle Access(u, t) = \begin{cases} 1, & (u, t) \in ACL \\ 0, & \text{otherwise} \end{cases}
权限判定就是一次清单查询:查询“用户 u 能否调用工具 t”,能查到二元组则放行(1),查不到则拒绝(0)。
  1. 主体与客体u 是发起调用的用户或 Agent,t 是目标工具。
    u∈Users, t∈Toolsu \in Users,\ t \in Tools
  2. 授权关系集合ACL 中存储所有“谁可以调用哪个工具”的二元组。
    ACL⊆Users×ToolsACL \subseteq Users \times Tools
  3. 查询判定如果二元组在 ACL 中,返回 1 表示放行。
    {1,(u,t)∈ACL0,otherwise\begin{cases} 1, & (u, t) \in ACL \\ 0, & \text{otherwise} \end{cases}
  4. 最小权限扩展所有任务所需权限的交集,既够用又最小。
    Pmin=⋂tasksPrequired(task)P_{min} = \bigcap_{tasks} P_{required}(task)

用户确认机制

阿智要进金库取一百万元现金,光有钥匙还不够——门上还有第二道锁,必须由主人按下指纹才能打开。这就是用户确认机制:某些敏感操作不能由 AI 单独决定,必须有人类点头。MCP 将工具按风险分级,把高风险操作(支付、删除数据、群发消息)标记为“需要确认”。

确认机制设计有三个细节。一是确认超时:阿智把请求提交给主人后,如果五分钟内没有答复,请求自动取消,避免悬而未决的隐患;二是双人复核:破坏性最强的操作要两位负责人分别批准,防止单人被社会工程学欺骗;三是跳过策略:对于低频、低风险的操作,可以配置免确认,避免打扰用户体验。

主人不可能时刻盯着阿智,但金库这类重点房间必须有“二次开锁”。用户确认机制就是 MCP 给人类保留的最终否决权。

E=P∧(T∉Sensitive∨Duser=1)\displaystyle E = P \land (T \notin Sensitive \lor D_{user}=1)
工具调用最终执行(E=1)的条件是:权限校验通过(P=1),并且该操作不属于敏感操作集合,或者用户给出了批准(D=1)。
  1. 权限通过标志P 代表前置权限校验的结果,1 表示有权调用。
    P∈{0,1}P \in \{0, 1\}
  2. 敏感操作判断T 是当前操作,Sensitive 是敏感操作集合。
    T∈SensitiveToolsT \in SensitiveTools
  3. 用户决定D 表示用户确认结果,1 为批准,0 为拒绝。
    Duser∈{0,1}D_{user} \in \{0, 1\}
  4. 执行条件只有“有权”且“不敏感或已批准”时才执行。
    E=P∧(T∉Sensitive∨Duser=1)E = P \land (T \notin Sensitive \lor D_{user}=1)

沙箱隔离机制

阿智煎药时,主人让他去厨房的玻璃隔间里操作。就算煎糊了、炸锅了,玻璃房能挡住大部分破坏,书房和账本安然无恙。这个玻璃隔间就是沙箱。MCP 中的工具执行环境往往不可完全信任——尤其是第三方开发的工具,无法保证内部没有漏洞或后门,所以必须在隔离环境中运行。

沙箱隔离要同时管好四个维度:进程隔离(工具看不到宿主机的其他进程和文件)、网络隔离(沙箱只能访问白名单域名,禁止连接内网)、资源限制(CPU、内存、磁盘设上限,防止恶意工具耗尽资源)、临时环境(沙箱结束后自动销毁所有临时文件)。有些攻击会尝试“打破玻璃”,但每一层限制都让逃逸成本更高。

阿智在玻璃房里干活,主人隔着玻璃看得很清楚,心里踏实;就算锅里起火,损失也控制在玻璃房之内。这就是沙箱的价值——让工具“能干活,但闯不了祸”。

Ssandbox⊂Shost,Cused≤Climit\displaystyle S_{sandbox} \subset S_{host}, \quad C_{used} \leq C_{limit}
沙箱内可用的系统调用集合必须是宿主机集合的真子集,且所有资源占用不能超过预设上限。玻璃房虽然透明,但墙壁是真材实料。
  1. 沙箱能力集合沙箱内可用的系统调用,是宿主机系统调用的一个受限子集。
    Ssandbox⊂ShostS_{sandbox} \subset S_{host}
  2. 宿主机能力宿主机的完整系统调用集合,包含文件、网络、设备等能力。
    ShostS_{host}
  3. 资源占用当前使用的 CPU、内存、磁盘等资源。
    Cused≤ClimitC_{used} \leq C_{limit}
  4. 资源上限预设的限额,超出则拒绝新任务。

审计日志追踪

主人要求阿智每天把做过的事写进小本本,而且每页右下角都要画一个与上一页连环相扣的记号。如果有人偷撕中间一页,标记立刻断裂,主人马上发现。这个“防撕页小本本”,对应 MCP 审计日志。全链路记录每一次工具调用:谁在什么会话中、调用了哪个工具、传了什么参数、结果如何、有没有通过确认。

审计日志有三大用途:调用监控(实时观察工具使用频率和模式)、异常告警(发现凌晨三点大批量删数据的异常行为)、日志留存(满足合规审计要求,通常保留 180 天以上)。为了让日志本身难被篡改,工程上常采用哈希链:每一条日志都包含上一条日志的摘要,环环相扣。

账本是阿智行为的“行车记录仪”,出了事能回溯、能定责。坏人看到这本撕不烂、改不动的账本,就不敢轻易动手脚了。

Hi=H(Hi−1∥Li)\displaystyle H_i = H(H_{i-1} \parallel L_i)
第 i 条日志的哈希值,由“上一条日志哈希”与“本条日志内容”拼接后做哈希得到。改任何一条历史日志,后面所有哈希都会对不上。
  1. 本条摘要H_i 是第 i 条日志的哈希值,相当于这一页的“指纹”。
    HiH_i
  2. 上一条摘要H_{i-1} 是前一条日志的指纹,把账本页页相连。
    Hi−1H_{i-1}
  3. 拼接操作∥ 表示把前一条指纹和本条内容首尾相连。
    Hi−1∥LiH_{i-1} \parallel L_i
  4. 哈希链对拼接结果做哈希运算,生成新的指纹。
    Hi=H(Hi−1∥Li)H_i = H(H_{i-1} \parallel L_i)

认证与会话

阿智进庄园前要先出示工作证确认身份,进园后每到一个房间,门禁都会核对“他是谁、今天的工号是多少、这趟会话编号是多少”。即使工作证被偷,也问题不大——每过 30 分钟令牌自动失效,小偷拿着过期证件进不了门。这就是认证与会话管理的意义。MCP 客户端与服务器之间,需要先完成身份认证,再建立合法会话。

MCP 常见的认证方案基于 OAuth 2.0 令牌:用户授权后,客户端拿到访问令牌,每次调用工具时携带令牌证明身份。传输层用双向 TLS(双向传输层安全协议)加密,防止中间人窃听和伪造。密钥托管在 KMS(密钥管理服务)中,私钥不出硬件模块。会话管理则包括令牌过期、刷新、吊销——发现异常立即让会话失效。

工作证加人脸、定期换证,阿智的每一次行动都说得清“是谁、何时、以什么身份进来的”。认证与会话管理,让 MCP 的每一步都有人可查、有证可验。

Verified=Verify(pk,m,σ),σ=Sign(sk,m)\displaystyle Verified = Verify(pk, m, \sigma), \quad \sigma = Sign(sk, m)
签名验证是认证的核心:请求方用私钥对消息签名,接收方用公钥验证。验证通过(Verified 为真),才承认“这条消息确实来自声称的身份”。
  1. 密钥对sk 是签名私钥,pk 是对应的验证公钥,私钥自己保管,公钥公开。
    sk, pksk,\ pk
  2. 原始消息m 是要发送的请求内容,比如工具调用参数。
    mm
  3. 生成签名请求方用私钥对消息生成签名 σ,相当于盖了一个防伪章。
    σ=Sign(sk,m)\sigma = Sign(sk, m)
  4. 验证签名接收方用公钥验证签名与消息是否匹配。
    Verify(pk,m,σ)=1Verify(pk, m, \sigma) = 1
  5. 认证结论验证返回 1,则确认身份真实,会话继续。
    Verified=(Verify(pk,m,σ)=1)Verified = (Verify(pk, m, \sigma) = 1)

攻击面防护

庄园越大、开着门的房间越多,坏人能潜入的口子就越多。主人因此规定:所有包裹进门前必须安检(输入校验),所有工具供应商实名备案(供应链安全),大门加装限流闸机(拒绝服务防护)。MCP 的攻击面,就是所有可以被外部输入触发的代码路径——工具数量越多、参数越复杂、暴露渠道越多样,攻击面越大。

攻击面防护的重点有三块。第一,输入校验:每个工具的参数都得符合声明好的 Schema(结构规范),超长字符串、恶意路径、畸形 JSON 一律拒绝。第二,工具校验:对工具描述做哈希签名,运行时校验描述是否被篡改,防止“工具投毒”诱导模型误调用。第三,供应链安全:只使用可信来源的 MCP 工具包,并在 CI 流水线中自动扫描依赖漏洞。

门多了不怕,只要每扇门都有安检、登记和限流,坏人就没那么容易混进来。攻击面防护不是把门全部封死,而是让每扇门都有守卫。

AS=∑t∈Tools(nparams(t)×nchannels(t))\displaystyle AS = \sum_{t \in Tools} \left( n_{params}(t) \times n_{channels}(t) \right)
攻击面等于每个工具的参数维度乘以暴露渠道数,再对所有工具求和。减少非必要参数、收敛暴露渠道,就能直接缩小攻击面。
  1. 参数维度每个工具接收的输入参数数量,参数越多,攻击者可利用的输入点越多。
    nparams(t)n_{params}(t)
  2. 暴露渠道工具可被访问的通道数量,比如 HTTP 接口、消息队列、本地函数。
    nchannels(t)n_{channels}(t)
  3. 单个工具的攻击面参数维度与暴露渠道的乘积。
    N(t)=nparams(t)×nchannels(t)N(t) = n_{params}(t) \times n_{channels}(t)
  4. 总攻击面对所有工具的攻击面求和。
    AS=∑t∈ToolsN(t)AS = \sum_{t \in Tools} N(t)

企业部署实践

安保制度不是贴在墙上的口号。主人把制度编成规章,定期组织防火演练,买了财产保险,还做了账本的异地备份——就算真出事,也能快速恢复。企业级 MCP 部署同样如此,需要把前面几层安全能力组装成一个体系,而不是各管各的。

实践要点有四条:分级策略(把工具按风险定级,高风险工具配全量安全层,低风险工具可简化流程)、合规要求(满足等保、GDPR 等法规对数据访问和日志留存的规定)、灾难恢复(审计日志和配置做异地备份,主节点宕机可切换)、安全测试(上线前做渗透测试和红蓝对抗,发现绕过路径)。为了量化安全水平,团队可以对各控制项打分。

一套完整的庄园安保,不是靠一道锁,而是靠制度、演练、保险形成的合力。MCP 安全模型也一样,层次叠起来,AI 管家才能既聪明又可靠。

Score=∑i=1nwi×Ci\displaystyle Score = \sum_{i=1}^{n} w_i \times C_i
先给每项安全控制(权限、确认、沙箱、审计等)打分,再乘上各自权重后求和,得到一个可对比的安全评分。评分低的分支要优先加固。
  1. 控制项C_i 表示第 i 项安全控制的完成度或覆盖率,例如“沙箱隔离覆盖了 90% 的工具”。
    CiC_i
  2. 权重w_i 表示该控制项在整体体系中的重要程度,权重总和为 1。
    wiw_i
  3. 加权求和每项得分乘权重后累加。
    Score=∑i=1nwi×CiScore = \sum_{i=1}^{n} w_i \times C_i

AI 应用场景

金融企业工具审批流

阶段:工具调用前置管控

解决的问题:银行让 AI 助手查询余额、发起转账,若没有细粒度拦截点,一次被篡改的指令可能造成资金损失。传统权限体系管不到“工具”这一层。

具体案例:某金融公司基于 MCP 部署内部助手,将“转账”工具标记为高敏感。每次 AI 调用该工具时,必须经过用户手机验证码确认,超过一万元还需双人复核。所有审批过程写入哈希链日志,供审计回溯。

电商客服机器人沙箱隔离

阶段:工具执行环境隔离

解决的问题:客服机器人调用订单查询 API 时,若执行环境直接连通内网,提示词注入可能让机器人访问内部数据库。

具体案例:某电商平台将 MCP Server 中的订单查询工具放进独立沙箱容器,网络白名单只允许访问订单服务域名,禁用内网 IP 段;CPU 和内存上限设为普通工单查询的两倍,防止恶意参数拖垮服务。

第三方工具供应链治理

阶段:工具发布与审计

解决的问题:开源 MCP 工具被投毒后,可能诱导 Agent 调取敏感信息并外传;只靠人工 review 无法覆盖大量第三方依赖。

具体案例:某科技公司建立内部 MCP 工具仓库,所有工具描述生成哈希签名,CI 流水线自动扫描漏洞依赖,签名不匹配或评分低于阈值的工具禁止发布,运行中定期审计工具行为。

Python 演示

python72 行
import hashlibimport jsonimport osimport tempfileimport time  class ToolGate:    """简化版 MCP 安全网关, 权限+确认+沙箱+审计链."""     def __init__(self):        self.acl = {"read_file", "search_web", "send_email"}        self.need_confirm = {"send_email", "delete_data"}        self.admin_only = {"delete_data"}        self.log = []        self._seq = 0     def check_permission(self, user, tool):        if tool not in self.acl:            return False, "工具不在白名单"        if tool in self.admin_only and user != "admin":            return False, "仅管理员可调用"        return True, "ok"     def confirm_action(self, tool, approve):        if tool not in self.need_confirm:            return True        return approve     def run_in_sandbox(self, tool, params):        sandbox = tempfile.mkdtemp(prefix="mcp_sandbox_")        result = {"tool": tool, "params": params, "sandbox": sandbox}        os.rmdir(sandbox)        return result     def append_log(self, user, tool, ok):        self._seq += 1        entry = {            "seq": self._seq,            "user": user,            "tool": tool,            "ok": ok,            "ts": time.time(),        }        raw = json.dumps(entry, sort_keys=True).encode("utf-8")        prev = self.log[-1]["hash"] if self.log else "GENESIS"        entry["hash"] = hashlib.sha256(prev.encode() + raw).hexdigest()        self.log.append(entry)        return entry     def call(self, user, tool, params, approve=True):        ok, msg = self.check_permission(user, tool)        if not ok:            self.append_log(user, tool, False)            return "拒绝: " + msg        if not self.confirm_action(tool, approve):            self.append_log(user, tool, False)            return "已取消"        result = self.run_in_sandbox(tool, params)        self.append_log(user, tool, True)        return "成功: " + json.dumps(result, ensure_ascii=False)  if __name__ == "__main__":    gate = ToolGate()    print(gate.call("alice", "read_file", {"path": "/tmp/a.txt"}))    print(gate.call("alice", "delete_data", {"path": "/db"}))    print(gate.call("admin", "delete_data", {"path": "/db"}, approve=False))    print(gate.call("admin", "delete_data", {"path": "/db"}, approve=True))    print("审计链:")    for e in gate.log:        print(e["seq"], e["user"], e["tool"], e["ok"], e["hash"][:12])
目的:模拟 MCP 安全网关的完整调用链路——先做工具白名单和角色权限校验,再做敏感操作的用户确认,随后在沙箱中执行,最后写入防篡改哈希链日志。
  1. if tool not in self.acl:白名单检查:没登记的工具一律拒绝,对应“工具白名单”策略。
  2. if tool in self.admin_only and user != "admin":越权拦截:只有 admin 角色能调删除类工具。
  3. if not self.confirm_action(tool, approve):敏感操作需要用户确认,不批准就取消。
  4. sandbox = tempfile.mkdtemp(prefix="mcp_sandbox_")在独立临时目录中执行,相当于玻璃隔间。
  5. prev = self.log[-1]["hash"] if self.log else "GENESIS"取出上一条日志哈希作为链头。
  6. entry["hash"] = hashlib.sha256(prev.encode() + raw).hexdigest()计算本条日志哈希,形成防篡改链。
  7. if __name__ == "__main__":程序入口,演示四种典型调用结果。
  8. gate.call("admin", "delete_data", {"path": "/db"}, approve=False)管理员有权限但用户拒绝,操作被取消。

常见误区

误区“只要在 MCP Server 配好工具白名单和角色权限,AI 就不可能干坏事。权限这一层覆盖了一切。”

正解权限只决定“能不能调用这个工具”,不决定“调用的意图和参数是否恶意”。工具投毒、提示注入可以在合法权限范围内诱导 AI 执行危险操作,用户确认、沙箱隔离、审计日志依然是必不可少的防线。就像阿智有书房钥匙,也不能阻止它被一张假便条骗去烧账本。

为何常见:大多数入门教程重点讲 ACL 配置,容易让人误以为权限就是安全的全部。

误区“工具放进沙箱容器里就跑不出去了,所以网络访问不用特别限制。”

正解沙箱隔离必须同时管进程、网络、资源和临时环境。只做进程隔离,攻击者仍可能借助 DNS 外传数据或利用网络侧信道逃逸。必须配置网络白名单、资源上限,并确保沙箱结束后清理临时文件,才算完整隔离。

为何常见:大家熟悉“容器隔离”的概念,但忽略了网络出口、资源耗尽这类绕行路径。

误区“日志不过是出事时用来追责的记录,平时不影响系统安全。”

正解审计日志支持实时调用监控、异常告警和攻击过程中断。哈希链能发现日志是否被篡改,帮助安全团队在攻击中期就响应,而不是等到事后。日志是“行车记录仪”,既记录事故,也能帮你在路上提前发现危险驾驶。

为何常见:把安全日志等同于传统后端业务日志,忽略了它的检测与告警价值。

误区“用了成熟的 MCP 框架后,安全机制全自动处理,开发者不用操心配置。”

正解MCP 协议只是定义了安全模型的骨架,具体策略——哪些工具需要确认、白名单范围多大、沙箱网络规则怎么定——都需要开发和运维人员按业务场景配置。框架不会替你思考“金库该装几道锁”。

为何常见:许多框架宣传“开箱即用”,让开发者误以为默认配置就是生产级安全。

误区“上线前把所有权限和工具列表配好,之后运行一年也不用再动。”

正解工具版本升级、新人加入、新第三方工具接入,都会引入新的安全风险。最小权限需要定期重新审计,白名单要随业务变化调整,并配合安全测试持续验证,才不会被“权限蔓延”拖垮。

为何常见:安全配置缺乏持续治理意识,把配置工作当成一次性交付。

面试题

Q1. MCP 中权限控制主要解决什么问题?

单选题 · easy

  • A.增大模型的推理参数量
  • B.规范 AI 对工具调用的授权边界← 正确答案
  • C.提高工具服务的访问速度
  • D.直接删除恶意的用户指令

答案:B。权限控制解决的是“谁可以调用哪个工具”的问题,对应选项 B。它不负责提升模型能力(A)、优化性能(C)或删除恶意指令(D),这些分别属于模型优化、系统调优和输入过滤的范畴。就像管家钥匙串决定能开哪些门,而不是决定钥匙有多闪亮。

Q2. 最小权限原则的核心思想是?

单选题 · mid

  • A.每个用户至少分配一种权限
  • B.权限越少系统性能越高
  • C.只授予任务所需的最少权限← 正确答案
  • D.所有工具默认禁止调用

答案:C。最小权限指为每个主体分配“刚好够用”的权限,既保证能完成任务,又限制越权风险。A 是“至少一种权限”的错误理解;B 把安全与性能混为一谈;D 是极端化理解,会导致任务无法完成。好比给管家书房钥匙就够查资料,不必给它金库钥匙。

Q3. 以下哪些场景应该触发用户确认机制?

多选题 · mid

  • A.高额资金支付操作← 正确答案
  • B.删除生产环境的数据← 正确答案
  • C.向全员发送营销邮件← 正确答案
  • D.查询公开的天气信息

答案:ABC。用户确认针对的是高影响、难挽回的操作:支付(A)、删生产数据(B)、群发消息(C)都符合。D 是只读公开信息,风险低,不需要确认。这与 MCP 中“敏感工具集合”的判断逻辑一致:操作越难撤销,越需要人类点头。

Q4. 沙箱网络隔离的主要目的是?

单选题 · mid

  • A.分摊服务器硬件开销
  • B.防止沙箱访问内网资源← 正确答案
  • C.提高外部网络的访问速率
  • D.简化网络路由的配置

答案:B。网络隔离的核心是限制沙箱的出口,防止恶意工具访问内网数据库或元数据服务,对应 B。A、C、D 是性能、体验和运维层面的考虑,不是安全隔离的目的。就像玻璃隔间不仅挡火,还要挡住里面的人伸手够到主人书桌上的密信。

Q5. 以下哪些属于 MCP 审计日志的安全价值?

多选题 · hard

  • A.替代密码认证机制
  • B.追溯安全事件的源头← 正确答案
  • C.验证日志防篡改能力← 正确答案
  • D.发现异常调用模式← 正确答案

答案:BCD。审计日志的价值包括溯源(B)、基于哈希链的防篡改验证(C)、实时监控发现异常(D)。A 错误,日志是记录而非认证手段,不能替代密码或令牌。审计日志是“行车记录仪”,能记录也能预警,但它不负责开车。

Q6. OAuth 令牌在 MCP 中的作用是?

单选题 · easy

  • A.对会话流量进行加密
  • B.标识用户身份与授权范围← 正确答案
  • C.加速模型的服务响应
  • D.存储会话的历史记录

答案:B。OAuth 令牌用来标识“是谁”以及“被授权做什么”,对应 B。流量加密是 TLS 的职责(A);加速响应是性能优化(C);存储历史是日志系统的职责(D)。令牌相当于管家的临时工作证,证明身份和权限范围,而不是车钥匙或账本。

Q7. 工具投毒攻击的核心特征是?

单选题 · hard

  • A.修改工具描述误导模型调用← 正确答案
  • B.给工具增加更多实用功能
  • C.优化工具输出结果的格式
  • D.降低工具响应的网络延迟

答案:A。工具投毒指攻击者篡改工具的说明文字或元数据,让模型误以为某个危险工具是安全且有用的,从而诱导调用,对应 A。B、C、D 都是正常的功能升级或性能优化,不构成攻击。这就像有人在工具使用说明书上做手脚,让管家把“打开金库”误当成“整理书架”。

Q8. 以下哪些措施能缓解工具投毒?

多选题 · hard

  • A.对工具描述进行哈希签名← 正确答案
  • B.限制工具来源为可信列表← 正确答案
  • C.定期审计工具运行行为← 正确答案
  • D.关闭所有外部输入接口

答案:ABC。哈希签名保证描述未被篡改(A)、可信来源列表从源头过滤(B)、运行行为审计发现异常(C)都能缓解工具投毒。D 是极端措施,会让工具完全不可用。好比安检、供应商备案和监控摄像头要配合使用,而不是把庄园所有门都砌死。

Q9. 沙箱最核心的安全价值是?

单选题 · easy

  • A.加速工具代码的运行效率
  • B.隔离执行环境降低风险影响← 正确答案
  • C.压缩日志系统的存储空间
  • D.简化工具部署的配置流程

答案:B。沙箱的核心是把不可信代码关进受限环境,即使出问题也能控制影响范围,对应 B。加速执行(A)、压缩日志(C)、简化部署(D)都不是安全目标。玻璃隔间的意义不是让厨师炒菜更快,而是炸锅时火不会烧到书房。

Q10. 企业 MCP 部署中,属于安全基线的是?

单选题 · mid

  • A.分级配置工具权限策略← 正确答案
  • B.关闭审计功能提升性能
  • C.跳过用户确认提高效率
  • D.取消沙箱减少资源占用

答案:A。分级权限策略是企业部署的基本要求,对应 A。B、C、D 都是以牺牲安全换性能或效率的错误做法。真实生产环境里,审计、确认、沙箱都是标准配置。就像庄园安保制度不会为了省事而拆掉摄像头和金库的双重锁。