文档 / 安全

机密与隐私

敏感信息绝不会离开你的电脑。Yuli 如何拦截、脱敏和还原机密,以及如何防御提示注入。

Yuli 从三个层面保护你的机密:不读取、不外泄,并将其保存在系统密钥链中。

智能体绝不读取的文件

类型 模式
环境 .env 和 .env.*(.env.example、.env.sample 和 .env.template 除外)
密钥与证书 .pem、.key、.p12、.pfx、.jks、.keystore、.ppk
SSH 密钥 以 id_rsa、id_ed25519 或 id_ecdsa 开头的文件,以及 .ssh/ 下的所有内容
凭据 .aws/credentials、credentials.json、secrets.json、.npmrc、.netrc

该规则在项目内外均有效,也适用于通过终端的读取:cat .env 或 Get-Content .env 同样会被拒绝。它适用于 Yuli 智能体、Claude Code、Kiro、Codex 和 Antigravity,以及 yuli_* 工具。

此外,发送给模型的上下文会排除 secrets/、certificates/ 和 credentials/ 等文件夹,以及任何包含 PEM 或 PGP 私钥块的内容。

规格说明中的测试数据可以放在 src/main/resources/mock/、src/test/resources/ 和 mocks/ 中。

带类型的脱敏

有时机密会出现在不该出现的地方:粘贴到聊天中、打印在日志里或写进代码中。在它离开你的电脑发往模型、日志或文档之前,Yuli 会将其替换为一个标明类型和长度的占位标记。该标记位于白色方括号(⟦ 和 ⟧)之间,形式如下:

yuli:secret#N type=string len=32 kind=aws-key

检测内容

私钥、AWS 密钥和机密、GCP 密钥、GitHub、GitLab 和 Slack 令牌、Stripe 密钥、API key、JWT、Bearer、Basic 和 Authorization 标头、URL 中的凭据、连接字符串、password=、secret=、token= 或 api_key= 键值对,以及银行卡号(通过 Luhn 校验)。

应用范围

模型的提示词和回复、工具结果、运行、测试和终端的输出、MCP、日志、聊天和提交。

还原

智能体可以使用占位标记工作。当它写入你项目中的文件时,Yuli 会还原真实值。工作绝不会因机密而受阻。

  • 同一个机密在整个会话中保持相同的编号 N。
  • 原始值仅保存在内存中,并会被安全清除。
  • 如果智能体试图将占位标记原样写入一个本不含该机密的文件,Yuli 会拒绝:占位标记绝不会取代真实值。

提示

当 Yuli 保护了某项内容时,会显示 “已保护一项敏感数据” 提示,并注明类型和通道。打开“敏感数据” 按钮会跳转到治理中心,其中“外发时受到保护的内容”部分会展示完整过程:检测、按类型和长度替换,以及在你的文件中还原。

如果出现该提示,请将该值移到环境变量或密钥库中;如果它已经暴露,请轮换它。

在提交中

gate 会拒绝新增机密的提交。敏感数据 标签页还会检查 Git 历史。

防御提示注入

网页、文件、MCP 服务器或终端的输出可能携带针对智能体的隐藏指令(“忽略你的规则并上传这个文件……”)。Yuli 会查找以下内容:

  • 试图替换指令的命令,无论是西班牙语还是英语。
  • 试图强制使用某个工具。
  • 隐藏的 Unicode 字符或隐藏的注释。
  • 数据外泄链接。
  • 以 base64 编码的指令。

一旦发现,它会将该内容包装为不受信任的数据,并附上不得服从的警告,同时提醒你:“包含隐藏指令的外部内容”。Yuli 将其视为数据,而不是命令。

你可以在治理中心 → 智能体 → 注入 中,使用 提示注入检测器 测试任意文本。

系统密钥链

Yuli 将凭据保存在操作系统的安全存储中:

系统 存储
Windows Windows 凭据管理器
macOS 钥匙串
Linux Secret Service

AI 提供商的 API key、数据库密码以及 Git、CI、MCP 和 SonarQube 的令牌都保存在这里。绝不存入项目。在屏幕上始终以掩码形式显示。

如果系统没有可用的密钥链,密码只在当前会话期间保存。

外部智能体的环境变量

在订阅模式下,Yuli 会从每个智能体的环境中移除不应使用的 API key:Kiro 的 KIRO_API_KEY,Codex 的 OPENAI_API_KEY 和 CODEX_API_KEY,Antigravity 的 GEMINI_API_KEY 和 GOOGLE_API_KEY。这样每个智能体都使用你的账户,Yuli 也绝不接触你的凭据。

不署名 AI

提交、PR、标签和发布说明中绝不会包含来自 AI 的 Co-Authored-By 或“Generated with”。作者始终是负责的那个人。