Skip to content

feat(security/tools): 为 file / grep / glob 工具接入统一安全检查 #151

Description

@Cai-Tang-www

背景

目标

在不改变 TUI -> Runtime -> Tool Manager 分层职责的前提下,为 file / grep / glob 统一接入安全检查链路,确保三类工具在路径解析、边界控制、敏感路径拦截与错误语义上保持一致。

范围

  1. 三类工具执行前统一走安全检查入口(不在工具内部各自散落规则)。
  2. 路径校验统一使用 workspace 规范化逻辑(含 traversal / symlink escape 防护)。
  3. 默认敏感路径策略一致:如 .git/**.env**.pem 等按规则 deny/ask
  4. 对超出 workspace 的访问做一致拒绝与错误包装。
  5. grep/glob 对批量匹配结果也执行同一边界与敏感路径过滤。

非目标

  • 不在本任务内实现 bash 安全执行器。
  • 不在本任务内引入新的 UI 交互形态。
  • 不扩展到 MCP server/tool 级策略(由后续子任务处理)。

实现建议

  • 在 Tool Manager / Permission Gateway 层增加可复用的 PathAction 判定与批量路径校验能力。
  • file 工具按单路径动作判定;grep/glob 在结果回传前做逐项过滤与标记。
  • 保持 provider/runtime 无厂商字段泄漏,不在 TUI 写安全逻辑。

结果过滤器(grep/glob)细化

  • grep/glob 的返回阶段引入统一 ResultFilter(或等价抽象),逐项校验 candidate path。
  • 过滤判定与 file 的路径安全规则保持同源(同一 workspace/sensitive policy)。
  • 对被过滤项记录结构化原因:outside_workspacesensitive_pathsymlink_escape(命名可按现有规范调整)。
  • 默认不泄露被拦截目标的敏感绝对路径;必要时仅返回安全可读的相对路径或计数摘要。
  • 输出中包含过滤统计元数据(如 matched_countfiltered_countreturned_count),便于 runtime/模型判断结果完整性。

验收标准

  • file / grep / glob 执行全部经过统一安全检查入口。
  • workspace 外路径访问被稳定拒绝(含 ..、符号链接逃逸)。
  • 敏感路径策略在三类工具行为一致。
  • 错误码/错误消息语义统一,可被 runtime 可靠消费。
  • grep/glob 结果过滤器完成并满足:
    • 返回结果仅包含通过安全检查的路径。
    • 被过滤项有稳定的结构化原因码。
    • 过滤后结果包含 matched_count/filtered_count/returned_count 等统计元数据。
    • 对敏感目标不泄露绝对路径。
  • 补齐测试:
    • path traversal
    • symlink escape
    • 敏感路径命中
    • grep/glob 批量结果过滤
    • 过滤原因码与统计元数据断言

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions