一上来就全量授权
你在准备阶段就给我开了 --dangerously-skip-permissions、把所有工具调用都自动批准,图的是「不被频繁打断」。但你同时也交出了在出错那一刻喊停的唯一机会——而出错的不一定是我,也可能是藏在某个文件里的一段注入指令借我的手干的。
settings 规则误写成 CLAUDE.md
你在 CLAUDE.md 里写「不要碰生产数据库」「跑命令前先问我」,以为这就管住了我。但 CLAUDE.md 对我只是建议性上下文——我会读、会尽量照办,但不保证;真要拦住一个动作,那是 settings.json 的活儿,它在客户端强制生效,根本不经过我「决定」这一关。
流程塞进 CLAUDE.md 而非 skill
你把「发布的十二步流程」「数据库迁移的全套 SOP」整段写进了 CLAUDE.md,想着这样我什么时候都记得。结果它每次会话都常驻上下文,连「改个错别字」的任务也得先读一遍——而这些只在特定任务才用得上的步骤,本该做成按需加载的 skill。
该用 hook 却写进提示词
你在 CLAUDE.md 里写了「改完代码必须跑 format」「提交前必须跑测试」「这些文件不许动」,然后指望我每次都照做。但提示词对我只是「建议」,不是「机制」——我会忘、会忽略、上下文一长就漂。要它必然发生,就别交给我的自觉,做成 hook。
MCP 授权过宽过敏感
你给我接 MCP server 时图省事,一把授予整库读写、生产数据库、密钥、对外发请求的工具。问题不只是「我可能误用」——你每多给我一个高权限 MCP 工具,就多开一条提示注入的攻击路径:我读到的某条 issue、某个网页里藏的恶意指令,可能借我手里的工具把数据送出去。
子代理无职责边界
你一句「开三个子代理并行做」就让我们各自跑起来,却没说清谁负责哪块、谁能改哪些文件、彼此怎么交接接口与数据格式。结果是:我们同时改同一批文件互相覆盖,对「现状」各有各的假设,最后拼起来对不齐——并行没有提速,反而制造了一堆需要你来收拾的冲突。
跳过 plan mode 直接放 手
一个不那么 trivial 的任务,你不先让我进计划模式调研、出计划、等你确认,而是直接说「改吧」。我会一头扎进某个方向,等改了一堆文件你才发现我理解偏了——返工的代价,远高于你当初花两分钟看一眼计划。
不接版本化文档放任凭记忆写
你没给我接一个版本对得上的权威文档源,就让我凭训练记忆加上网搜去写某个库的调用。结果我用过时的 API、把不同大版本的用法混在一起、甚至幻觉出根本不存在的方法——而这些代码「看起来都对」,编译期未必报错,到运行时才崩。
过度依赖:自动化偏误
这一条不是讲我会犯什么错,而是讲你过度信任我会怎样。我输出又快又自信,于是「照单全收 」成了最省力的默认;可我恰恰会自信地错。久了,你审查流于形式、对代码库的掌控感退化——而这两件事,正是本该由你把住的最后一道关。
破坏性 / 不可逆操作
你给我的是合法凭据,我用它干的也是「合法」的操作——只是其中一条是删生产库、抹掉备份、或者在冻结期强行改动。这类动作的麻烦不在于难,而在于做完才发现回不来。我天生倾向「让任务往前走」,对「这一步删了就没了」缺乏敬畏;护栏得由你在准备阶段就架好,靠机制而不是靠我自觉。
Gemini 信任继承
Gemini CLI 有一层 per-folder 的「信任」存储(~/.gemini/trustedFolders.json):信任一个目录,它的项目配置和 .env 才会生效、确认也更少。但「信任父目录」会把信任继承 给所有子目录;还有人报告父目录的 TRUST 会盖过子目录显式的 DONOTTRUST。于是你 clone 进来想隔离的陌生仓库,只因为躺在一个被信任的父目录下,就被当成可信——这正是注入最想落脚的地方。Claude Code 没有这层信任存储,所以这类坑是 Gemini CLI 特有。
.cursorignore 不是安全边界
Cursor 的 .cursorignore 看着像「把这些文件挡在 AI 视野之外」,但 Cursor 官方文档明说它是尽力而为——「不保证里面的文件不会被送上去,可能有 bug」。它挡的是被动索引 / 读取,挡不住我在 agent 模式下直接用 shell cat 你「忽略」的文件。把「忽略了 = AI 看不到」当成密钥的护栏,是个会出事的错觉。
自主性审批边界
你给我开了自动执行,却没说清「哪些动作我能直接做、哪些得先问你」。 于是我用对待「改个错别字」的随意度去删数据库表、改生产配置、发对外请求——不是我恶意,是你没给我一把按风险分级的尺子,我就把「能自动做」当成了「该自动做」。
数据边界策略
为了让我帮上忙,你把真实数据贴给我——生产库 dump、客户资料、密钥、还没公开的源码。可你从没告诉我「哪些数据绝不能离开公司边界」,我只会把它当普通上下文处理。而数据一旦交给外部 AI,就等于送出了边界:收不回、可能被留存、可能被复述到别处。
沙箱隔离
你用 allow / ask / deny 这种「软权限」控制我能跑什么命令,但我跑命令的进程和你的整台机器、凭据、网络是同一个域。软权限是一道我(或我读到的恶意内容)可以试图绕过的策略, 不是操作系统强制的墙。一旦提示注入劫持了我,我就够得着你的 SSH key、环境变量、整个文件系统和对外网络。
网络出口控制
你管住了我能读什么文件,却没管住我能往哪儿发请求。只要我能向任意域名发出站流量,我就成了数据外泄的出口:读到的源码、密钥、数据,我能编码进一个 URL 发到攻击者的服务器——这正是「致命三件套」里最该被砍掉的第三条腿。
世界可写配置提权
你让我从一个「谁都能写」的系统级目录(Windows 上的 C:\ProgramData)载入配置和 hook,却没人校验那个目录归谁、文件是谁放的。于是一个低权限的本地用户只要往那儿丢一份配置、挂一个「每次启动就跑」的 hook,我就会在每一个启动我的用户(包括管理员)名下替他执行那条命令——不用提权、不用你点确认、不留告警。