目录
- 前言
- 一、MCP协议架构与安全模型
- 1.1 MCP协议概述
- 1.2 核心架构组件
- 1.3 信任边界分析
- 二、威胁模型与攻击面分析
- 2.1 攻击面全景图
- 2.2 威胁建模
- 2.3 攻击者画像与动机
- 三、攻击原理深度解析
- 3.1 工具投毒攻击
- 3.2 编排注入攻击
- 3.3 传统漏洞在MCP中的映射
- 3.4 供应链攻击
- 3.5 会话劫持与认证绕过
- 四、核心攻防机制详解
- 4.1 输入验证与净化架构
- 4.2 权限模型与授权机制
- 4.3 沙箱隔离与运行时防护
- 4.4 检测与监控体系
- 五、技术优缺点与适用场景
- 六、实战落地
- 6.1 红队攻击复现
- 6.2 蓝队防御方案
- 6.3 企业落地架构
- 6.4 生产避坑经验
- 七、全文总结
- 本期专栏更新说明
- 参考资料
前言
核心威胁:随着 MCP(Model Context Protocol)在 2025-2026 年成为 AI Agent 工具调用的事实标准,其安全攻击面正在以指数级速度扩张。从 NSA 于 2026 年 5 月发布专项安全指南,到学术界发现 MCP 生态中 43% 的实现存在命令注入漏洞,MCP 安全已经从一个边缘话题迅速升级为企业 AI 基础设施的核心风险。攻击者可以通过工具投毒、编排注入、会话劫持、供应链污染等多种向量,在用户毫无感知的情况下窃取数据、执行命令、甚至获得持久化主机控制权。
适配人群:本文适合具备中高级安全工程能力的 AI 安全研究员、平台安全架构师、DevSecOps 工程师,以及正在企业环境中部署 AI Agent 系统的技术决策者学习。读者应具备基本的 LLM 应用安全知识(如 OWASP Top 10 for LLM)和 Web 安全基础。
收获能力:读完本文,您将系统掌握:(1) MCP 协议的完整攻击面地图与威胁模型构建方法论;(2) 工具投毒、编排注入、会话劫持等核心攻击向量的技术原理与实战 PoC;(3) 从输入净化到沙箱隔离的多层防御架构设计;(4) 可直接落地的企业级 MCP 安全网关部署方案与检测规则。
安全态势:MCP 协议的标准化使得大语言模型首次获得了通用化的外部工具调用能力——AI Agent 可以读写文件、查询数据库、发送 HTTP 请求、执行 Shell 命令。这种能力的泛化在极大提升生产力的同时,也将传统 API 安全、供应链安全、运行时安全的威胁面融合到了一个全新的协议层攻击面中。根据 Checkmarx Zero 的研究,MCP 安全风险横跨传统 AppSec、供应链安全、以及协议特有的 AI 交互安全三个维度,形成了一个复合型威胁矩阵。
一、MCP协议架构与安全模型
1.1 MCP协议概述
MCP(Model Context Protocol)由 Anthropic 于 2024 年底推出,定位为连接大语言模型与外部工具、数据源的开放标准协议。其设计哲学类似于\”AI 世界的 USB-C 接口\”——提供统一的协议层,使任何 LLM 客户端都能通过标准化的方式发现、调用和管理外部工具。
MCP 的核心价值主张在于解决 LLM 的\”孤立问题\”:即使最强大的模型,在没有外部工具支持的情况下,也无法访问实时数据、执行代码、或与外部系统交互。MCP 通过定义标准的工具描述格式(JSON Schema)、传输协议(stdio/HTTP SSE/Streamable HTTP)、以及认证授权框架(OAuth 2.1),为 AI Agent 提供了一个可扩展的能力扩展层。
然而,正是这种\”统一接口\”的设计,使得 MCP 的攻击面具有高度集中性和传导性——一旦协议层被攻破,所有通过 MCP 连接的工具和数据源都将面临风险。
1.2 核心架构组件
MCP 架构由三个核心角色组成:
#mermaid-svg-2qkIgHR2pP6xkc9u{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2qkIgHR2pP6xkc9u .error-icon{fill:#552222;}#mermaid-svg-2qkIgHR2pP6xkc9u .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2qkIgHR2pP6xkc9u .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2qkIgHR2pP6xkc9u .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2qkIgHR2pP6xkc9u .marker.cross{stroke:#333333;}#mermaid-svg-2qkIgHR2pP6xkc9u svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2qkIgHR2pP6xkc9u p{margin:0;}#mermaid-svg-2qkIgHR2pP6xkc9u .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster-label text{fill:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster-label span{color:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster-label span p{background-color:transparent;}#mermaid-svg-2qkIgHR2pP6xkc9u .label text,#mermaid-svg-2qkIgHR2pP6xkc9u span{fill:#333;color:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u .node rect,#mermaid-svg-2qkIgHR2pP6xkc9u .node circle,#mermaid-svg-2qkIgHR2pP6xkc9u .node ellipse,#mermaid-svg-2qkIgHR2pP6xkc9u .node polygon,#mermaid-svg-2qkIgHR2pP6xkc9u .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2qkIgHR2pP6xkc9u .rough-node .label text,#mermaid-svg-2qkIgHR2pP6xkc9u .node .label text,#mermaid-svg-2qkIgHR2pP6xkc9u .image-shape .label,#mermaid-svg-2qkIgHR2pP6xkc9u .icon-shape .label{text-anchor:middle;}#mermaid-svg-2qkIgHR2pP6xkc9u .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2qkIgHR2pP6xkc9u .rough-node .label,#mermaid-svg-2qkIgHR2pP6xkc9u .node .label,#mermaid-svg-2qkIgHR2pP6xkc9u .image-shape .label,#mermaid-svg-2qkIgHR2pP6xkc9u .icon-shape .label{text-align:center;}#mermaid-svg-2qkIgHR2pP6xkc9u .node.clickable{cursor:pointer;}#mermaid-svg-2qkIgHR2pP6xkc9u .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2qkIgHR2pP6xkc9u .arrowheadPath{fill:#333333;}#mermaid-svg-2qkIgHR2pP6xkc9u .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2qkIgHR2pP6xkc9u .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2qkIgHR2pP6xkc9u .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2qkIgHR2pP6xkc9u .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2qkIgHR2pP6xkc9u .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2qkIgHR2pP6xkc9u .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster text{fill:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u .cluster span{color:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2qkIgHR2pP6xkc9u .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2qkIgHR2pP6xkc9u rect.text{fill:none;stroke-width:0;}#mermaid-svg-2qkIgHR2pP6xkc9u .icon-shape,#mermaid-svg-2qkIgHR2pP6xkc9u .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2qkIgHR2pP6xkc9u .icon-shape p,#mermaid-svg-2qkIgHR2pP6xkc9u .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2qkIgHR2pP6xkc9u .icon-shape .label rect,#mermaid-svg-2qkIgHR2pP6xkc9u .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2qkIgHR2pP6xkc9u .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2qkIgHR2pP6xkc9u .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2qkIgHR2pP6xkc9u :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
MCP Host (AI应用) – 协调多个MCP客户端持有全局上下文与记忆
MCP Client 1协议层桥接器
MCP Client 2协议层桥接器
MCP Server A文件系统工具
MCP Server B数据库工具
MCP Server C第三方API工具
LLM推理引擎
MCP Host:运行 AI 应用的主程序(如 Claude Desktop、VS Code Copilot、Cursor),负责管理多个 MCP Client 实例,持有全局对话上下文和用户记忆。
MCP Client:协议层桥接器,维护与一个或多个 MCP Server 的 1:1 连接,负责工具发现、调用协商、以及将 LLM 的工具调用请求转发给对应的 MCP Server。
MCP Server:工具的实际提供方,暴露工具列表、资源、提示词模板。本地 MCP Server 直接在用户机器上执行代码(高风险),远程 MCP Server 通过 HTTP 提供服务(数据安全风险)。
1.3 信任边界分析
MCP 协议的信任模型存在一个关键的结构性矛盾:LLM 既是用户意图的执行者,也是外部不可信输入的消费方。这一矛盾导致了如下信任边界:
#mermaid-svg-afJahBV2FFXNtNkf{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-afJahBV2FFXNtNkf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-afJahBV2FFXNtNkf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-afJahBV2FFXNtNkf .error-icon{fill:#552222;}#mermaid-svg-afJahBV2FFXNtNkf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-afJahBV2FFXNtNkf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-afJahBV2FFXNtNkf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-afJahBV2FFXNtNkf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-afJahBV2FFXNtNkf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-afJahBV2FFXNtNkf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-afJahBV2FFXNtNkf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-afJahBV2FFXNtNkf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-afJahBV2FFXNtNkf .marker.cross{stroke:#333333;}#mermaid-svg-afJahBV2FFXNtNkf svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-afJahBV2FFXNtNkf p{margin:0;}#mermaid-svg-afJahBV2FFXNtNkf .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-afJahBV2FFXNtNkf .cluster-label text{fill:#333;}#mermaid-svg-afJahBV2FFXNtNkf .cluster-label span{color:#333;}#mermaid-svg-afJahBV2FFXNtNkf .cluster-label span p{background-color:transparent;}#mermaid-svg-afJahBV2FFXNtNkf .label text,#mermaid-svg-afJahBV2FFXNtNkf span{fill:#333;color:#333;}#mermaid-svg-afJahBV2FFXNtNkf .node rect,#mermaid-svg-afJahBV2FFXNtNkf .node circle,#mermaid-svg-afJahBV2FFXNtNkf .node ellipse,#mermaid-svg-afJahBV2FFXNtNkf .node polygon,#mermaid-svg-afJahBV2FFXNtNkf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-afJahBV2FFXNtNkf .rough-node .label text,#mermaid-svg-afJahBV2FFXNtNkf .node .label text,#mermaid-svg-afJahBV2FFXNtNkf .image-shape .label,#mermaid-svg-afJahBV2FFXNtNkf .icon-shape .label{text-anchor:middle;}#mermaid-svg-afJahBV2FFXNtNkf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-afJahBV2FFXNtNkf .rough-node .label,#mermaid-svg-afJahBV2FFXNtNkf .node .label,#mermaid-svg-afJahBV2FFXNtNkf .image-shape .label,#mermaid-svg-afJahBV2FFXNtNkf .icon-shape .label{text-align:center;}#mermaid-svg-afJahBV2FFXNtNkf .node.clickable{cursor:pointer;}#mermaid-svg-afJahBV2FFXNtNkf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-afJahBV2FFXNtNkf .arrowheadPath{fill:#333333;}#mermaid-svg-afJahBV2FFXNtNkf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-afJahBV2FFXNtNkf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-afJahBV2FFXNtNkf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-afJahBV2FFXNtNkf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-afJahBV2FFXNtNkf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-afJahBV2FFXNtNkf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-afJahBV2FFXNtNkf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-afJahBV2FFXNtNkf .cluster text{fill:#333;}#mermaid-svg-afJahBV2FFXNtNkf .cluster span{color:#333;}#mermaid-svg-afJahBV2FFXNtNkf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-afJahBV2FFXNtNkf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-afJahBV2FFXNtNkf rect.text{fill:none;stroke-width:0;}#mermaid-svg-afJahBV2FFXNtNkf .icon-shape,#mermaid-svg-afJahBV2FFXNtNkf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-afJahBV2FFXNtNkf .icon-shape p,#mermaid-svg-afJahBV2FFXNtNkf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-afJahBV2FFXNtNkf .icon-shape .label rect,#mermaid-svg-afJahBV2FFXNtNkf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-afJahBV2FFXNtNkf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-afJahBV2FFXNtNkf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-afJahBV2FFXNtNkf :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
可信
需判断
不可信
需判断
不可信
不可信
用户输入信任域 A
LLM推理信任域 B
工具定义信任域 C
工具输出信任域 D
外部数据信任域 E
信任域 A(用户输入):传统安全模型中的主要不信任源,但在 MCP 场景中,用户输入往往是最可控的部分。
信任域 C(工具定义):包含工具名称、描述、参数 Schema —— 这些元数据直接进入 LLM 上下文,成为提示注入的理想载体。这是 MCP 特有的高风险攻击面。
信任域 D(工具输出):工具执行结果返回给 LLM 用于后续推理,可能是间接提示注入的载体。
信任域 E(外部数据):MCP Server 从互联网、数据库、文件系统获取的数据,经过工具返回后进入 LLM 上下文,形成间接提示注入路径。
核心安全挑战:信任域 C、D、E 的内容在 LLM 上下文中与用户指令具有同等的\”权威性\”——LLM 无法从语义上区分\”用户想要做什么\”和\”攻击者通过工具描述想要 LLM 做什么\”。
二、威胁模型与攻击面分析
2.1 攻击面全景图
基于对公开发布的 MCP 安全漏洞(50+ CVE,13+ Critical)和学术界、工业界研究的综合分析,MCP 协议的攻击面可以从五个维度进行系统化分解:
#mermaid-svg-nHNQB4emUxciEYHF{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nHNQB4emUxciEYHF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nHNQB4emUxciEYHF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nHNQB4emUxciEYHF .error-icon{fill:#552222;}#mermaid-svg-nHNQB4emUxciEYHF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nHNQB4emUxciEYHF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nHNQB4emUxciEYHF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nHNQB4emUxciEYHF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nHNQB4emUxciEYHF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nHNQB4emUxciEYHF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nHNQB4emUxciEYHF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nHNQB4emUxciEYHF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nHNQB4emUxciEYHF .marker.cross{stroke:#333333;}#mermaid-svg-nHNQB4emUxciEYHF svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nHNQB4emUxciEYHF p{margin:0;}#mermaid-svg-nHNQB4emUxciEYHF .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-nHNQB4emUxciEYHF .cluster-label text{fill:#333;}#mermaid-svg-nHNQB4emUxciEYHF .cluster-label span{color:#333;}#mermaid-svg-nHNQB4emUxciEYHF .cluster-label span p{background-color:transparent;}#mermaid-svg-nHNQB4emUxciEYHF .label text,#mermaid-svg-nHNQB4emUxciEYHF span{fill:#333;color:#333;}#mermaid-svg-nHNQB4emUxciEYHF .node rect,#mermaid-svg-nHNQB4emUxciEYHF .node circle,#mermaid-svg-nHNQB4emUxciEYHF .node ellipse,#mermaid-svg-nHNQB4emUxciEYHF .node polygon,#mermaid-svg-nHNQB4emUxciEYHF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nHNQB4emUxciEYHF .rough-node .label text,#mermaid-svg-nHNQB4emUxciEYHF .node .label text,#mermaid-svg-nHNQB4emUxciEYHF .image-shape .label,#mermaid-svg-nHNQB4emUxciEYHF .icon-shape .label{text-anchor:middle;}#mermaid-svg-nHNQB4emUxciEYHF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nHNQB4emUxciEYHF .rough-node .label,#mermaid-svg-nHNQB4emUxciEYHF .node .label,#mermaid-svg-nHNQB4emUxciEYHF .image-shape .label,#mermaid-svg-nHNQB4emUxciEYHF .icon-shape .label{text-align:center;}#mermaid-svg-nHNQB4emUxciEYHF .node.clickable{cursor:pointer;}#mermaid-svg-nHNQB4emUxciEYHF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nHNQB4emUxciEYHF .arrowheadPath{fill:#333333;}#mermaid-svg-nHNQB4emUxciEYHF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nHNQB4emUxciEYHF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nHNQB4emUxciEYHF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nHNQB4emUxciEYHF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nHNQB4emUxciEYHF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nHNQB4emUxciEYHF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nHNQB4emUxciEYHF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nHNQB4emUxciEYHF .cluster text{fill:#333;}#mermaid-svg-nHNQB4emUxciEYHF .cluster span{color:#333;}#mermaid-svg-nHNQB4emUxciEYHF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nHNQB4emUxciEYHF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nHNQB4emUxciEYHF rect.text{fill:none;stroke-width:0;}#mermaid-svg-nHNQB4emUxciEYHF .icon-shape,#mermaid-svg-nHNQB4emUxciEYHF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nHNQB4emUxciEYHF .icon-shape p,#mermaid-svg-nHNQB4emUxciEYHF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nHNQB4emUxciEYHF .icon-shape .label rect,#mermaid-svg-nHNQB4emUxciEYHF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nHNQB4emUxciEYHF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nHNQB4emUxciEYHF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nHNQB4emUxciEYHF :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
数据层攻击面
网硕互联帮助中心




评论前必须登录!
注册