Open Code Review:审查范围、文件过滤与模型调用
读取 .env 路径过滤源码:15 个隔离测试说明了什么
通过隔离 Go 测试理解模板例外,并分清环境文件名函数与完整敏感路径过滤的验证范围。
你将学会
- 先看调用方,再看小函数
- 只执行已经审阅的小段上游代码
- 保留文件名规则的适用范围
开始前需要
- 理解 Git 改动与合并基点比较
- 会使用命令行并理解模型凭据的用途
选择审查范围,解释文件排除原因,设计受控试验,并区分源码审阅和运行证据。
先看结论
- 文件名函数只有三个精确的模板例外。
- 其他敏感路径规则仍可能拒绝模板文件。
- 执行的 15 个案例没有扫描文件内容。
先看调用方,再看小函数
IsSecretPath 先把输入转换为小写,检查 .env 文件家族,再遍历嵌入的通配规则。内部函数使用 path.Base,明确放过 .env.example、.env.sample 和 .env.template,其余 .env 以及以 .env. 开头的名称会被判定为敏感。
调用方决定了如何解释返回值。只执行文件名函数时,.ssh/.env.example 会因为模板名例外而返回 false;完整 IsSecretPath 还会继续检查其他模式。上游测试预期该路径被拒绝,因为它位于 .ssh 目录内。
只执行已经审阅的小段上游代码
本次夹具提取经过审阅的 isSecretEnvPath 原函数,用 Go 标准库编译执行。15 个案例包含嵌套路径、模板例外、.env.example.secret、调用方的大写输入处理,以及尾部斜杠。全部案例在本地 Go 执行中通过。
夹具显式使用 strings.ToLower,模拟调用方传入小写路径的约定,没有引入完整通配依赖,也没有执行整个选择器。报告保存源码哈希和各案例的预期值。把它称作 OCR 的完整安全扫描,会超出实际验证内容。
保留文件名规则的适用范围
源码明确说明 IsSecretPath 不检查文件内容。普通源文件也可能包含凭据,而模板名称不能证明里面的值都是占位符。把入选内容发送给模型之前,还需要执行团队的数据处理规则和内容敏感信息检查。
敏感路径函数返回 false,同样不代表文件一定会被审查,后面还有扩展名、默认排除以及其他选择条件。反过来,仅通过这个文件名小函数的路径,也可能被另一条敏感目录规则拒绝,.ssh 模板案例就体现了这种关系。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
一起阅读调用方、内部函数和上游测试,再解释返回值。
- 2
用合成文件名运行隔离测试,不接触真实凭据。
- 3
把完整选择器和文件内容检查保留为独立验证项目。
可复制示例
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 alibaba/open-code-review Contributors
// Imports: path, strings. Input: strings.ToLower(filePath).
func isSecretEnvPath(lowerPath string) bool {
base := path.Base(lowerPath)
switch base {
case ".env.example", ".env.sample", ".env.template":
return false
}
return base == ".env" || strings.HasPrefix(base, ".env.")
}常见问题
.env.example 是否一定会送到模型?
不会。还要经过其他路径和选择规则,文件名本身也不能说明内容是否含密钥。
为什么隔离测试中的 .ssh/.env.example 返回 false?
它只测试 basename 小函数;完整函数后面的目录通配规则可以拒绝该路径,上游测试也明确写出了这一预期。
资料来源
- Open Code Review / internal/config/allowlist/secret_path.go来源核查 2026-09-18
- Open Code Review / internal/config/allowlist/secret_path_test.go来源核查 2026-09-18
- Open Code Review / internal/agent/selection.go来源核查 2026-09-18