> ## Documentation Index
> Fetch the complete documentation index at: https://ccsafetynet.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 秘密保护参考

> CC Safety Net 内置秘密保护规则的完整目录：敏感基本名称、受保护的主目录、密钥文件变体、凭据扩展、两个编码 CLI 层、拒绝路径以及所有豁免。

秘密保护会阻止对可能包含凭据的文件进行读写，例如 SSH 密钥、`.env` 文件、云凭据存储和编码代理身份验证令牌。它在命令分析之前运行，并适用于**所有**安全级别。它会拒绝超出结构分析限制的输入。

本页列出了每个内置规则 ID、它匹配的内容及其默认状态。使用它来查找路径是否受保护以及哪个规则 ID 控制它。有关 `secret_protection` 架构，请参阅[策略](/docs/zh-Hans/configuration/policy)。有关防护流程，请参阅[架构](/docs/zh-Hans/guides/architecture)。有关命令示例，请参阅[被阻止的命令](/docs/zh-Hans/reference/blocked-commands)。

共有 **132 条注册规则**。大多数属于共享一个 ID 模式的生成族，因此下表列出了族及其 ID 形式，而不是每个 ID。除十条规则的[编码 CLI 配置层](#coding-cli-config-tier-off-by-default)外，所有规则默认开启。

## 运行位置

敏感路径保护是一个防护阶段，它在命令分析**之前**运行，涵盖支持的**命令**、**路径**、**搜索** (grep/glob) 和**补丁**形式。对于 CC Safety Net 不识别的工具，它会检查命令候选提取和类路径值——而不会将该工具的任意文本视为 shell 命令。

| 形状                        | 检查内容                                                                                       |
| ------------------------- | ------------------------------------------------------------------------------------------ |
| `command`                 | 从解析的命令中提取的路径目标，包括段、管道、重定向目标、命令替换、`VAR=value` 赋值以及赋值扩展的备用文本 (`${VAR:=path}`, `${VAR=path}`) |
| `path`                    | 提取的类路径工具值（读、写、编辑工具输入）                                                                      |
| `search` (`grep`, `glob`) | 文件操作数，与提供模式的标志区分开来                                                                         |
| `patch`                   | 提取的类路径工具值                                                                                  |
| 未知工具                      | 命令候选提取**和**路径值                                                                             |

匹配会以 `hard_stop` 意图拒绝并携带匹配的规则 ID，因此[阻止消息](/docs/zh-Hans/guides/how-it-works)和[审计日志](/docs/zh-Hans/reference/audit-log)会命名确切的规则。读取也会被阻止，而不仅仅是写入：`cat .env`、`strings id_rsa` 和 `dd if=.env` 都会被阻止。

将备用值赋值的扩展会将该备用值作为路径暴露，无论是未加引号还是双引号：`cat "${X:=.env}"` 和 `cat ${X=.env}` 都会在 `secret.basename.env` 下被阻止。单引号文本保持不变，因此 `cat '${X:=.env}'` 不会阻止。

## 匹配顺序

每个候选路径都会按顺序经过以下检查。第一个匹配获胜；豁免仅适用于其后的规则。

1. **配置的[拒绝路径](/docs/zh-Hans/configuration/policy)** — 在每个内置规则和每个豁免之前检查。命中归因于 `secret.deny-path`。
2. **Env 模板豁免** — 模板基本名称保持可读；请参阅[豁免](#exemptions)。
3. **[主目录规则](#home-directory-rules)** — 整个受保护的目录，例如 `~/.ssh`。这些规则优先于公钥豁免，因此 `~/.ssh/id_rsa.pub` 仍然会被阻止。
4. **[编码 CLI 规则](#coding-cli-credential-tier-on-by-default)** — 每个代理的凭据和配置路径。
5. **公钥豁免** — `id_rsa.pub`、`id_ed25519.pub` 和 `id_ecdsa.pub` 在受保护目录之外不是秘密。
6. **[基本名称规则](#basename-rules)**，然后是 **`.env.*` 模式**，然后是\*\*[密钥变体规则](#key-variant-rules)\*\*。
7. **供应商目录豁免** — 仅抑制剩余的两个族；请参阅[豁免](#exemptions)。
8. **广泛的 SSH 基本名称模式**，然后是\*\*[扩展规则](#extension-rules)\*\*。

<span id="basename-rules" />

## 基本名称规则

九条规则阻止任何目录中的精确基本名称。

| 规则 ID                             | 基本名称               |
| --------------------------------- | ------------------ |
| `secret.basename.env`             | `.env`             |
| `secret.basename.npmrc`           | `.npmrc`           |
| `secret.basename.pypirc`          | `.pypirc`          |
| `secret.basename.netrc`           | `.netrc`           |
| `secret.basename.git-credentials` | `.git-credentials` |
| `secret.basename.id-rsa`          | `id_rsa`           |
| `secret.basename.id-ed25519`      | `id_ed25519`       |
| `secret.basename.id-ecdsa`        | `id_ecdsa`         |
| `secret.basename.credentials`     | `credentials`      |

两个值得了解的边界：

* `secret.basename.credentials` 仅匹配精确名称 `credentials`。`credentials.json` 不匹配它——也不匹配任何其他内置规则。
* 没有 `id_dsa` 基本名称规则。精确的 `id_dsa` 仍然会被阻止，通过下面的广泛模式 `secret.pattern.ssh-key-basename`。

一条模式规则扩展了 `.env` 族：`secret.pattern.env-variant` 阻止所有以 `.env.` 开头的基本名称——`.env.local`、`.env.production`、`.env.template.local`——除了[豁免模板](#exemptions)。

<span id="home-directory-rules" />

## 主目录规则

这些规则保护主目录下的位置：目录本身及其内部的所有内容。

| 规则 ID                       | 保护内容                     |
| --------------------------- | ------------------------ |
| `secret.home.ssh`           | `~/.ssh`                 |
| `secret.home.aws`           | `~/.aws`                 |
| `secret.home.gcp`           | `~/.gcp`                 |
| `secret.home.gcloud-config` | `~/.config/gcloud`       |
| `secret.home.kube-config`   | `~/.kube/config`         |
| `secret.home.docker-config` | `~/.docker/config.json`  |
| `secret.home.gh-hosts`      | `~/.config/gh/hosts.yml` |

这两个单文件规则 (`kube-config`、`docker-config`) 各有八条伴随规则，涵盖重命名的备份，ID 形式为 `secret.home.<slug>.<suffix>`：后缀是 `bak`、`backup`、`copy`、`disabled`、`old`、`orig`、`save` 和 `tmp`。因此 `~/.kube/config.bak` 在 `secret.home.kube-config.bak` 下被阻止，`~/.docker/config.json.old` 在 `secret.home.docker-config.old` 下被阻止。这总共是 16 条生成规则，整个族中有 23 条。

<span id="key-variant-rules" />

## 密钥变体规则

密钥和凭据文件的重命名保护副本是它们自己的族，由五个受保护的前缀构建：`id_rsa`、`id_dsa`、`id_ed25519`、`id_ecdsa` 和 `credentials`。每个 ID 中的 slug 是带有短划线的前缀 (`id-rsa`、`credentials` 等)。

* **分隔符变体** — `secret.variant.<slug>.separator` (5 条规则)。阻止前缀后跟 `-` 或 `_` 以及其后的任何内容：`id_rsa-old`、`id_rsa_backup`、`credentials_prod`。
* **点后缀变体** — `secret.variant.<slug>.<suffix>` (50 条规则)。阻止前缀后跟十个后缀中的一个：`.bak`、`.backup`、`.copy`、`.disabled`、`.key`、`.old`、`.orig`、`.pem`、`.save`、`.tmp`。因此 `id_rsa.bak` 在 `secret.variant.id-rsa.bak` 下被阻止，`credentials.pem` 在 `secret.variant.credentials.pem` 下被阻止。

该族是故意精确的，因此相似的名称会通过：`id_rsafoo` 不匹配任何分隔符，`credentials.json` 使用了列表之外的后缀。

一个广泛的模式结束了该族：`secret.pattern.ssh-key-basename` 阻止任何以 `_rsa`、`_dsa`、`_ed25519` 或 `_ecdsa` 结尾的**无扩展名**基本名称——`deploy_key_rsa`、`github_ed25519`。包含点的名称永远不会匹配它。

<span id="extension-rules" />

## 扩展规则

二十一条 ID 形式为 `secret.ext.<extension>` 的规则阻止任何带有该扩展名的文件：

`.agilekeychain`、`.asc`、`.bek`、`.cscfg`、`.fve`、`.gnucash`、`.jks`、`.keychain`、`.kwallet`、`.mdf`、`.ovpn`、`.p12`、`.pcap`、`.pem`、`.pfx`、`.pkcs12`、`.psafe3`、`.rdp`、`.sdf`、`.tblk`、`.tpm`

三条**扩展模式**规则涵盖扩展族：

| 规则 ID                         | 扩展名                    |
| ----------------------------- | ---------------------- |
| `secret.ext-pattern.key`      | `.key`、`.keypair`      |
| `secret.ext-pattern.keystore` | `.keystore`、`.keyring` |
| `secret.ext-pattern.kdbx`     | `.kdb`、`.kdbx`         |

覆盖必须使用族 ID——`secret.ext-pattern.key`，而不是 `secret.ext.keypair`。未注册的 ID 将被 `unknown secret protection rule id "<id>"` 拒绝。

<span id="coding-cli-credential-tier-on-by-default" />

## 编码 CLI 凭据层（默认开启）

九条规则保护受支持编码代理的凭据存储。与迄今为止的所有其他规则一样，只要启用秘密保护，它们就会开启。

| 规则 ID                    | 保护内容                                                                                                                                 |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| `secret.cli.claude-code` | `~/.claude/.credentials.json`                                                                                                        |
| `secret.cli.codex`       | `~/.codex/auth.json`、`~/.codex/.credentials.json`、`~/.codex/secrets`、`~/.codex/.sandbox-secrets`                                     |
| `secret.cli.gemini`      | `~/.gemini/oauth_creds.json`、`~/.gemini/mcp-oauth-tokens.json`、`~/.gemini/a2a-oauth-tokens.json`、`~/.gemini/gemini-credentials.json` |
| `secret.cli.copilot-cli` | `~/.copilot/config.json`、`~/.copilot/mcp-oauth-config`、`~/.copilot/mcp-secrets`                                                      |
| `secret.cli.kimi-code`   | `~/.kimi-code/server.token`、`~/.kimi-code/credentials`、`~/.kimi/credentials`、`~/.kimi/mcp-oauth`                                     |
| `secret.cli.opencode`    | `~/.local/share/opencode/auth.json`、`~/.local/share/opencode/mcp-auth.json`、`~/.local/share/opencode/opencode.db`                    |
| `secret.cli.pi`          | `~/.pi/agent/auth.json`                                                                                                              |
| `secret.cli.amp`         | `~/.local/share/amp/secrets.json`、`~/.amp/oauth`                                                                                     |
| `secret.cli.cursor`      | `~/.cursor/auth.json`、`~/.config/cursor/auth.json`、`~/.cursor/projects/<name>/mcp-auth.json`                                         |

Antigravity 没有凭据规则——它唯一的规则位于下面的配置层。

<span id="coding-cli-config-tier-off-by-default" />

## 编码 CLI 配置层（默认关闭）

十条规则涵盖相同代理的设置和 MCP 配置文件。这些文件可以内联携带凭据，但代理也会将其作为日常工作进行编辑，因此此层默认**关闭**，每条规则都需要在 [`secret_protection.overrides`](/docs/zh-Hans/configuration/policy) 中明确设置为 `"on"` 才能激活。`<project>` 路径将匹配任何仓库根目录，一旦规则开启。

| 规则 ID                           | 启用时保护内容                                                                                                                                                                                                         |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `secret.cli.claude-code.config` | `~/.claude/settings.json`、`~/.claude/settings.local.json`、`~/.claude.json`、`<project>/.claude/settings.local.json`、`<project>/.mcp.json`                                                                        |
| `secret.cli.codex.config`       | `~/.codex/config.toml`、`~/.codex/<name>.config.toml`                                                                                                                                                            |
| `secret.cli.gemini.config`      | `~/.gemini/settings.json`、`~/.gemini/google_accounts.json`、`<project>/.gemini/settings.json`、`/Library/Application Support/GeminiCli/settings.json`、`/etc/gemini-cli/settings.json`                             |
| `secret.cli.copilot-cli.config` | `~/.copilot/mcp-config.json`                                                                                                                                                                                    |
| `secret.cli.kimi-code.config`   | `~/.kimi-code/config.toml`、`~/.kimi-code/mcp.json`、`~/.kimi/config.toml`、`~/.kimi/config.json`、`~/.kimi/config.json.bak`、`~/.kimi/mcp.json`、`<project>/.kimi-code/mcp.json`                                     |
| `secret.cli.opencode.config`    | `~/.config/opencode/opencode.json`、`~/.config/opencode/opencode.jsonc`、`/Library/Application Support/opencode/opencode.json`、`/etc/opencode/opencode.json`、`<project>/opencode.json`、`<project>/opencode.jsonc` |
| `secret.cli.pi.config`          | `~/.pi/agent/models.json`                                                                                                                                                                                       |
| `secret.cli.amp.config`         | `~/.config/amp/settings.json`、`~/.config/amp/settings.jsonc`、`<project>/.amp/settings.json`、`<project>/.amp/settings.jsonc`                                                                                     |
| `secret.cli.cursor.config`      | `~/.cursor/mcp.json`、`<project>/.cursor/mcp.json`                                                                                                                                                               |
| `secret.cli.antigravity`        | `~/.gemini/config/hooks.json`、`~/.gemini/config/mcp_config.json`                                                                                                                                                |

## 拒绝路径

[`secret_protection.deny_paths`](/docs/zh-Hans/configuration/policy) 添加您自己的受保护位置。命中是归因于 `secret.deny-path` 的硬停止——这是一个**未**注册的 ID，因此任何覆盖都无法禁用它，并且本页上的任何豁免都不适用于它。拒绝路径仅在 `secret_protection.enabled` 为 `false` 时停止应用，这会关闭整个阶段。接受的输入形式在[策略](/docs/zh-Hans/configuration/policy)中。

<span id="exemptions" />

## 豁免

三项豁免限制了上述规则。它们都不能放宽已配置的拒绝路径。

* \*\*Env 模板。\*\*精确的基本名称 `.env.example`、`.env.sample`、`.env.template` 和 `.env.defaults`——加上任何以 `.env.example.` 或 `.env.sample.` 开头的名称——在每个内置规则之前都被豁免，即使在受保护的主目录中也是如此。前缀形式不会进一步扩展：`.env.template.local` 会像任何其他 `.env.*` 名称一样在 `secret.pattern.env-variant` 下被阻止。
* **公钥。**`id_rsa.pub`、`id_ed25519.pub` 和 `id_ecdsa.pub` 不是秘密且被豁免——但仅限于受保护主目录之外，这些目录会首先被检查。`./id_rsa.pub` 被允许；`~/.ssh/id_rsa.pub` 在 `secret.home.ssh` 下被阻止。
* \*\*供应商目录。\*\*当任何路径段是 `node_modules` 或 `__pycache__`，或者出现相邻的 `vendor/bundle` 或 `vendor/cache` 对时，只有两个族被抑制：扩展规则（普通和模式）和广泛的 `secret.pattern.ssh-key-basename` 规则。所有其他规则仍然适用于那里——`node_modules/x/.env` 和 `node_modules/x/id_rsa` 照常被阻止。`.git` 不在跳过集中。

## 配置

所有配置都位于 [`policy.json`](/docs/zh-Hans/configuration/policy) 中：

* `secret_protection.enabled: false` 会关闭整个阶段——包括内置规则和拒绝路径。
* `secret_protection.overrides` 通过注册 ID 设置每条规则的状态：`"off"` 禁用默认开启的规则；`"on"` 启用配置层规则。
* `secret_protection.deny_paths` 添加您自己的受保护位置。

[允许路径](/docs/zh-Hans/guides/analysis-engine)和任何标准模式的允许都不会放松秘密保护。在[严格模式](/docs/zh-Hans/configuration/modes)下，这些路径的仅元数据发现（`test -f ~/.ssh/id_rsa`、`find ~/.ssh -type f`）也会被阻止。[仪表板](/docs/zh-Hans/guides/dashboard)通过 UI 编辑相同的设置。

<Note>
  秘密保护是一个有界模式集，而不是通用的读取边界。文件中没有规则识别的凭据不受保护——有关该边界，请参阅[与沙盒](/docs/zh-Hans/guides/vs-sandboxing)，有关层级注意事项，请参阅[已知限制](/docs/zh-Hans/guides/known-limitations)。秘密**脱敏**——从日志和阻止消息中清除凭据值——是一种单独的机制，记录在[审计日志参考](/docs/zh-Hans/reference/audit-log)和[安全模型](/docs/zh-Hans/guides/security-model)中。
</Note>
