.env 文件、云凭据存储和编码代理身份验证令牌。它在命令分析之前运行,并适用于所有安全级别。它会拒绝超出结构分析限制的输入。
本页列出了每个内置规则 ID、它匹配的内容及其默认状态。使用它来查找路径是否受保护以及哪个规则 ID 控制它。有关 secret_protection 架构,请参阅策略。有关防护流程,请参阅架构。有关命令示例,请参阅被阻止的命令。
共有 132 条注册规则。大多数属于共享一个 ID 模式的生成族,因此下表列出了族及其 ID 形式,而不是每个 ID。除十条规则的编码 CLI 配置层外,所有规则默认开启。
运行位置
敏感路径保护是一个防护阶段,它在命令分析之前运行,涵盖支持的命令、路径、搜索 (grep/glob) 和补丁形式。对于 CC Safety Net 不识别的工具,它会检查命令候选提取和类路径值——而不会将该工具的任意文本视为 shell 命令。
匹配会以
hard_stop 意图拒绝并携带匹配的规则 ID,因此阻止消息和审计日志会命名确切的规则。读取也会被阻止,而不仅仅是写入:cat .env、strings id_rsa 和 dd if=.env 都会被阻止。
将备用值赋值的扩展会将该备用值作为路径暴露,无论是未加引号还是双引号:cat "${X:=.env}" 和 cat ${X=.env} 都会在 secret.basename.env 下被阻止。单引号文本保持不变,因此 cat '${X:=.env}' 不会阻止。
匹配顺序
每个候选路径都会按顺序经过以下检查。第一个匹配获胜;豁免仅适用于其后的规则。- 配置的拒绝路径 — 在每个内置规则和每个豁免之前检查。命中归因于
secret.deny-path。 - Env 模板豁免 — 模板基本名称保持可读;请参阅豁免。
- 主目录规则 — 整个受保护的目录,例如
~/.ssh。这些规则优先于公钥豁免,因此~/.ssh/id_rsa.pub仍然会被阻止。 - 编码 CLI 规则 — 每个代理的凭据和配置路径。
- 公钥豁免 —
id_rsa.pub、id_ed25519.pub和id_ecdsa.pub在受保护目录之外不是秘密。 - 基本名称规则,然后是
.env.*模式,然后是**密钥变体规则**。 - 供应商目录豁免 — 仅抑制剩余的两个族;请参阅豁免。
- 广泛的 SSH 基本名称模式,然后是**扩展规则**。
基本名称规则
九条规则阻止任何目录中的精确基本名称。
两个值得了解的边界:
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——除了豁免模板。
主目录规则
这些规则保护主目录下的位置:目录本身及其内部的所有内容。
这两个单文件规则 (
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 条。
密钥变体规则
密钥和凭据文件的重命名保护副本是它们自己的族,由五个受保护的前缀构建: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。包含点的名称永远不会匹配它。
扩展规则
二十一条 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,而不是 secret.ext.keypair。未注册的 ID 将被 unknown secret protection rule id "<id>" 拒绝。
编码 CLI 凭据层(默认开启)
九条规则保护受支持编码代理的凭据存储。与迄今为止的所有其他规则一样,只要启用秘密保护,它们就会开启。
Antigravity 没有凭据规则——它唯一的规则位于下面的配置层。
编码 CLI 配置层(默认关闭)
十条规则涵盖相同代理的设置和 MCP 配置文件。这些文件可以内联携带凭据,但代理也会将其作为日常工作进行编辑,因此此层默认关闭,每条规则都需要在secret_protection.overrides 中明确设置为 "on" 才能激活。<project> 路径将匹配任何仓库根目录,一旦规则开启。
拒绝路径
secret_protection.deny_paths 添加您自己的受保护位置。命中是归因于 secret.deny-path 的硬停止——这是一个未注册的 ID,因此任何覆盖都无法禁用它,并且本页上的任何豁免都不适用于它。拒绝路径仅在 secret_protection.enabled 为 false 时停止应用,这会关闭整个阶段。接受的输入形式在策略中。
豁免
三项豁免限制了上述规则。它们都不能放宽已配置的拒绝路径。- **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 中:
secret_protection.enabled: false会关闭整个阶段——包括内置规则和拒绝路径。secret_protection.overrides通过注册 ID 设置每条规则的状态:"off"禁用默认开启的规则;"on"启用配置层规则。secret_protection.deny_paths添加您自己的受保护位置。
test -f ~/.ssh/id_rsa、find ~/.ssh -type f)也会被阻止。仪表板通过 UI 编辑相同的设置。