官方已经写清楚的例外
Claude Code 的 WebFetch 会按你给的 URL 拉页面。很多人以为:只要权限模式是 Manual 或 acceptEdits,出站读网页都会先问你。
官方 Tools reference 的例外更细:
In Manual and acceptEdits permission modes, WebFetch prompts before fetching, except for domains your permission rules already allow or deny and a built-in set of preapproved documentation domains that fetch without a prompt.
也就是说:你 settings 里一行都没写时,仍有一批「内置预批准文档域」可以不弹确认就拉取。同页也写了唯一能盖过这批名单的办法——显式的 WebFetch(domain:...) 写进 deny / ask / allow;其中 deny 与 ask 才能真正拦住或强制再确认预批准域。只写 allow、把名单「收窄」,挡不住预批准集合。
公开仓库里,止住侧是 0
@MindOrbitAI 与 @kotteri_ai 转述同一份扫描(公开约 3,255 仓库、拿到配置后统计):
- 提交了
.claude配置的约 368 本; - 其中写过 WebFetch 相关规则的约 51 本;
- 这 51 本里,deny 与 ask 均为 0——大家几乎只在写「允许谁」,没人写「不许谁 / 先问我」;
- 另有仓库把本该本机私有的
.claude/settings.local.json也提交了(扫描里约数十本量级)。
文章强调:预批准域多半是官方文档一类站点,日常未必立刻出事;真正要防的是——拉回来的文字里若夹带指令,可能成为下一步工具调用的依据。入口用 deny/ask,执行前还可用 PreToolUse hook。
可执行清单
- 打开项目
.claude/settings.json,为敏感域加WebFetch(domain:...)的 deny 或 ask(需要时再对预批准域动手)。 - 不要用裸
WebFetch/WebFetch(*)当「全开」。 - 弹窗选 Yes, and don't ask again 时,规则会进 settings.local.json——确认
.gitignore已忽略该文件,别提交给全队。 - 对照官方 permissions / tools-reference 升级后做一次
/permissions自查。
如果你想把 Claude Code 放在一台常开、整机独享的新加坡 Mac mini 上长期运行,可以了解 Zumac.Ai,咨询 Telegram @singatao。
