Skip to content

[code-review] file_guard matchDoubleStar: glob metacharacters in the prefix before ** are matched literally — protected_paths like src/*-gen/** silently fail to protect #445

Description

@topcheer

文件: internal/tool/file_guard.go:161-193(关键 :178)

问题: 含 ** 的 pattern 按第一个 ** 切分后,prefix 部分只用 == / HasPrefix 字面量比较,prefix 中的 、?、[...] 通配符不展开(suffix 部分却走 filepath.Match 完整 glob)。上游 matchProtectedPattern 注释明确承诺 glob 语义(.env、src/secrets/),且不含 ** 的 pattern 走 filepath.Match 全展开——语义上更宽的 src/*-gen/ 保护力反而更弱。

触发场景(复核实测确认):

  • matchGlob("src/*-gen/**", "src/a-gen/secret.key") = false(期望 true)
  • IsProtected 全链路确认不拦截——写入保护静默失效(fail-open),无任何告警

预期 vs 实际: 预期 src/-gen/** 保护所有 src/<任意>-gen/ 子树;实际不存在字面量叫 src/-gen 的路径,保护完全失效。

修复建议: prefix 改为按 / 切段逐段 filepath.Match,与 suffix 处理对齐;补测试(src/*-gen/** vs src/a-gen/x、src/[ab]/** vs src/a/x)。顺带考虑 **/空 prefix 分支仅匹配 basename 的深层后缀限制。

严重程度: Medium-High(安全控制静默失效,仅用户配置通配 prefix 时触发;独立复核实测确认)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions