正在刊行长文 · Essay
2026-06-17所有内容
随机比特 · Random Bits

越有经验的开发者,越容易中这个 npm 陷阱

2026-06-17AI Engineering / Systemsrbits.uk

给 AI 只读权限,它会是你最好的代码审查员。给读写权限,反而不行。

6 月 15 日,研究员 Roman 在 LinkedIn 收到一条 recruiter 消息。聊了两天,对方发来个 GitHub 仓库请他 review,“重点看下废弃的 Node 模块问题”。Roman 起了疑心——开了台 VPS,只给 Agent 四个只读工具:

pi --tools read,grep,find,ls

Agent 立刻停在 app/test/index.js

文件 250 行,看起来就是个测试套件——describe、it、一堆注释掉的用例。典型的"新手写的脏代码"。

AI 不看气质,找到个 URL 拼接:七个变量——protocoldomainseparatorpathtokensubdomainbearrtoken——拼出 https://rest-icon-handler.store/icons/77。第 225 行,一行压缩代码从该 URL 拉取 payload 本地执行。

触发链极短:npm install 之后,npm 的 prepare 生命周期自动执行 node app/index.js,后者一行 require('./test') 加载即触发整条攻击链。

<!-- diagram:attack-chain -->

攻击者只需要你 clone 仓库,跑 npm install。"检查下废弃的模块问题"就是在催你跑这行命令。

有经验的开发者为什么更容易漏掉

Roman 在文章里写了句实话:“在更累的一天,我完全可能没多想就跑 npm install。”

这不靠警惕性。靠的是认知机制本身有盲区。

你看到一个 250 行的测试文件,变量名故意拼错(bearrtoken),大段注释掉的代码——大脑零点几秒归档:"新手乱写,跳过。"这套分类绝大多数时候是对的,替你省了海量时间。

但攻击者把后门精确伪装成"烂代码"。你越有经验,归档越自动,跳得越快。

Agent 设成只读后,没有"不值得看"的概念。只看逻辑流:拼出远程地址 → 拉取 → 执行。跟代码好不好看没关系。

把 AI 锁在沙盒里,能力才出得来

主流 AI Agent 默认都是读写模式。对齐方向是帮你把事做成,不是帮你找出哪里不对

只给四个工具——read、grep、find、ls——对齐方向就变了。唯一能做的事就是看,然后告诉你哪里不对。

可复制的操作:在一台 VPS 上跑 pi --tools read,grep,find,ls,扫全仓异常,重点看网络请求、文件执行、prepare/postinstall 脚本。

AI 不会替代安全工程师。但它不会犯人类最常犯的错——把可疑模式归档为"烂代码"然后翻页。

和谁有关

三个场景,至少一个你今年会碰到:

AI 做安全审查这件事,真正的天花板不是模型能力。人类审查代码的瓶颈是注意力,不是智商。

随机比特公众号二维码
公众号 · 随机比特
从 AI 工具热闹里拆工程真相

写边界、控制面、上下文、成本与安全。