首页/文章/Windows 上 Claude Code hook 曾静默放行:缺 Git Bash 时升级到 2.1.310 并自测拦截

Windows 上 Claude Code hook 曾静默放行:缺 Git Bash 时升级到 2.1.310 并自测拦截

· Zumac.Ai

帖子说了什么

@ayyazdev 提醒:Claude Code 2.1.310 修了一个 Windows 专用问题——若本机没有 Git Bash,而 PreToolUse / PermissionRequest 的 hook 命令又只是带引号的字符串(例如一整段被引号包住的脚本路径),工具调用会直接放行。守卫写在 hooks 里,hooks 却没真正跑起来,Agent 照样执行。@LLMpsycho、@RealAlexandreAI 也强调同一点:一个「看起来开着、实际 fail-open」的守卫,比没有守卫更糟,因为你会放松盯梢。

对照官方说明

我们核对了 Claude Code 的发布说明与 hooks 文档:

  • v2.1.310 CHANGELOG 原文写明:Windows 上,Git Bash 缺失且 hook 的 command 只有引号字符串(如引号路径)时,PreToolUse / PermissionRequest 曾错误放行工具调用,现已修复。
  • hooks 参考:命令型 hook 可用 args 走 exec 形式(command 为可执行文件,args 为参数列表,不经 shell);也可设 "shell": "powershell"。未装 Git Bash 时,默认会走 PowerShell。
  • 文档还提到:Windows 在未找到 Git Bash 时,部分 PreToolUse / PermissionRequest 失败场景会按「只有 exit 0 或 2 才算裁决」处理;应用 onFailure: "block"、改用 exec 形式,或安装 Git for Windows,都能避免「守卫挂了却继续执行」。

结论与帖子一致:这是已确认的安全修复,不是传闻。

你可以立刻做的几件事

  1. 先升级到 2.1.310 或更新。 在终端执行 claude update,再用 claude --version 确认版本号。
  2. 检查 hook 怎么写。 尽量用 exec:"command": "node"(或真正的可执行文件)加上 "args" 列表指向脚本,不要只塞一个带引号的路径字符串;若坚持用 PowerShell,显式写 "shell": "powershell"。
  3. 关键守卫加 onFailure: "block"。 脚本缺失、崩溃、超时时也应拦截,而不是静默放行(需较新版本支持该字段)。
  4. 改完必做一次「故意弄坏」自测。 临时改错脚本路径或去掉可执行权限,再让 Agent 触发本应被拦的操作;确认调用被拒后,立刻恢复正确配置再测一遍正向拦截。
  5. Windows 若长期依赖 Bash 语法 hook,安装 Git for Windows,或把脚本改成 PowerShell / Node,避免混用导致行为漂移。

小结

把安全押在 hooks 上时,最怕的不是「拦不住某条命令」,而是拦了却没跑。Windows 用户请升到 2.1.310,改掉「纯引号路径」写法,并用一次失败自测确认守卫真的还会说不。

来源

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服