
这两天看AI编程工具的安全消息,让我想起了一个我经常提到的事儿。
很多人已经习惯把一个陌生项目丢给AI,然后说一句"你帮我跑起来"。它会装依赖、看报错、修、再跑一遍,像个特别勤快的小助理。
问题也在这。它太勤快了。
以前你自己跑陌生项目,看到安装命令、初始化脚本、权限提示,多少会停一下。
现在AI替你跑,它看到报错以后,可能会自己找下一条命令,自己复制,自己执行。你以为它在解决问题,其实它可能已经走过了你本来会犹豫的那一步。
今天就给一张保命清单。以后你让Claude Code、Codex、Cursor或者其他AI Agent跑陌生仓库之前,先让它过一遍。

先说发生了什么
最近安全圈在讨论一类风险,意思很简单:一个看起来干净的GitHub项目,也可能在安装或初始化过程中,把危险动作藏到外部链路里。
仓库本身可能没写明显恶意代码。问题出在运行时。比如安装失败后,错误信息引导AI去执行一段脚本,这段脚本再从外部地址拿下一步命令。人眼看仓库时没看到坏东西,普通扫描工具也不一定立刻发现。可AI为了把项目跑起来,会顺着提示继续往下走。
这就多了一层麻烦。过去我们担心代码里有没有坑,现在还要担心AI为了修坑,自己去跳另一个坑。
AI帮你跑环境、看报错、整理依赖,确实省时间。
但你得先给它画边界。

第一条,远程脚本先展开,不许直接跑
看到这类命令,先停。
curl https://xxx/install.sh | sh
wget https://xxx/setup.sh -O- | bash
powershell -c "iwr https://xxx/script.ps1 | iex"
先解释这三条在干什么。curl ... | sh 的意思是:从网上下载一段脚本,直接喂给命令行执行,中间不停。wget ... | bash 是同一件事的另一种写法。iwr ... | iex 是 Windows PowerShell 的版本,下载完立刻执行。共同点是,你还没看脚本里有什么,它已经跑了。
正确做法很土。先让AI把脚本下载下来,展开内容,解释每一步,再问你要不要执行。
你可以直接给AI这句话:
凡是远程下载后立即执行的命令,不要直接运行。先把脚本内容保存到本地,逐行解释它会改哪些文件、访问哪些外部地址、读取哪些环境变量,然后等我确认。
意思就是告诉AI:你可以干活,但得先把手伸出来让我看一下。
第二条,install、init、setup报错后,不要让AI自动补命令
很多危险动作发生在报错以后,第一条命令反而少见。
你让AI跑npm install(Node项目装依赖的第一步),报错了。它去看README,又看到一条初始化命令。初始化也报错,它再去搜解决方案,最后跑了一个你根本没看过的脚本。
人类自己折腾环境时,也会这样一路试。但AI的问题是,它试得太快。你刚喝口水,它已经执行了三步。
所以把规则写死:
安装或初始化失败后,不要自动执行新的修复命令。先列出你准备尝试的命令、原因、风险等级和可回滚方式,我确认后再继续。
这里最关键是"可回滚方式",也就是万一搞砸了怎么退回原来状态。"风险等级"四个字反而其次。一个命令如果说不清怎么退回,就不要急着跑。
第三条,新项目先关进小房间
陌生项目别直接放在你的主工作目录里跑,更别放在有密钥、有客户代码、有真实业务配置的目录旁边。
先把几个词说清楚,不然下面看不懂。.env 是项目用来存配置的文件,常见的数据库密码、API key 经常写在这里面。SSH key 是你登录远程服务器、推送代码到GitHub时用的身份凭证。浏览器Cookie 是你登录状态的载体。这三样东西被拿走,等于把账号钥匙给了别人。
最简单的做法,是单独建一个干净目录。里面没有.env,没有SSH key,没有Cookie,没有你平时工作项目里的配置文件。让AI只在这个小房间里折腾。
如果你有条件,用容器、虚拟机、临时Windows沙盒都行。没有条件也没关系,至少先做到一件事:别让它在你的主项目里乱跑。
很多人觉得这一步麻烦。可真正麻烦的是,AI一旦读到了不该读的东西,你很难回头判断它到底有没有发出去、发给了谁、什么时候发的。
第四条,环境变量和密钥先拿走
接着上一条的几个词。API key 是你调用各种AI、云服务时用来认账的字符串,谁拿到谁就能用你的额度和身份。数据库密码、GitHub token(GitHub的访问令牌)、云服务密钥,性质都一样。
这些东西不要放在AI要跑陌生项目的环境里。
你可以让它先用假的配置跑通结构。比如数据库连接写成示例地址,API key写成占位符,比如写成sk-your-api-key-here这种假字符串。等项目可信了,再换真实配置。
尤其是.env文件。很多项目启动时会自动读取它,AI也可能为了省事帮你复制一份。你如果不提前说,它不一定知道这里哪些东西不能碰。
给AI的规则可以这么写:
运行陌生项目时,不读取、不复制、不打印任何真实密钥、token、cookie、SSH配置和.env文件。如果项目必须要配置,先生成示例配置。
道理很简单:别把钥匙放在桌面上,再怪别人顺手拿起来。
第五条,先看package scripts
如果是Node项目(用JavaScript写的那一类),别急着npm install完就npm run dev。先让AI打开package.json(Node项目的配置清单),看scripts字段里写了什么。
有些脚本名字看起来很正常,比如postinstall(安装完自动跑)、prepare、dev、start。真正执行时,它可能会跑额外命令、下载二进制文件、改本地配置。
Python项目也一样。先看pyproject.toml、setup.py、requirements.txt这类文件,里面写着装什么、怎么装。Rust、Go、Bun、Deno都各有自己的入口。你不需要每个生态都懂,但可以要求AI先解释入口。
先搞清楚三件事:它会装什么,会执行什么,会访问哪里。
第六条,需要管理员权限的命令,一律停
先解释几个词。sudo 是Linux和Mac下"临时用管理员身份运行一条命令"的写法。注册表是Windows的中央配置库,系统级设置都存在这里。hosts 是系统里的域名映射表,能强行把某个网址指向别的地址。shell profile 是命令行每次启动时自动跑的脚本,改了它,你以后每次开终端都带着这个改动。
sudo、管理员PowerShell、改系统目录、写注册表、改hosts、改shell profile,这些都先停。
很多安装教程喜欢把权限开大,因为这样省解释。但对普通人来说,权限越大,出问题越难收拾。AI Agent更是这样。它一旦有了高权限,就可能把一个小错误放大成系统级问题。
我现在看这类命令,第一反应是问:它为什么需要这么大的权限?解释不清,就别跑。
可以让AI先找低权限方案。实在没有,再单独确认。
如果对你有帮助,记得关注一波~
第七条,外部域名要列出来
一个项目启动时访问GitHub、npm、PyPI、Docker Hub很正常。访问一个你认不出来的域名,就要停一下。
先把几个黑话翻译一下。DNS TXT 是域名系统里的一种记录,正常用来配邮件验证这类事,但也能塞自定义内容进去。paste站是Pastebin这类公开贴文本的网站,常被用来临时放一段代码或命令。短链接、临时文件托管、看不懂的CDN(内容分发网络)地址,都属于"为什么不直接用正规源"的可疑信号。
这些不一定有问题。但这种链路不适合让AI自动放过去。
给AI加一个检查点:
执行前列出所有将要访问的外部域名,说明每个域名的用途。如果用途不清楚,先不要访问。
它会逼AI把藏在安装过程里的外部依赖讲出来。
第八条,别让AI自己改你的长期配置
有些命令跑一次没事,改长期配置就麻烦了。
PATH 是系统查找命令的目录列表,改了它,你可能再也跑不起来原来的工具。shell profile 上一条解释过了。Git全局配置影响你每一次代码提交。SSH配置影响每一台你能登录的服务器。安装常驻服务、写入开机启动项,则是让一个程序每次开机都自动跑。
今天你是为了跑一个小项目,结果AI顺手把这些长期行为改了。以后每次开终端,每次git push,每次跑node,都可能带着这个改动。到那时候你再排查,会很烦。
所以陌生项目阶段,规则要明确:
不要修改全局配置、启动项、shell profile、Git全局配置、SSH配置和系统PATH。必须修改时,先说明影响范围和恢复命令。
恢复命令很重要。能写出来,说明它至少知道自己动了哪里。
第九条,让AI先交命令计划,不要直接开跑
很多人用AI Agent的方式太像许愿:帮我把这个项目跑起来。
这句话太宽了。AI会自己拆解,也会自己判断。它可能做得很好,也可能为了完成目标一路放权。
更稳的说法是:
先不要执行命令。请先给我一份运行计划,包含准备执行的命令、每条命令的目的、可能修改的文件、外部网络访问、风险等级和回滚方式。等我确认后,再一步一步执行。
这句话一放,AI就从"替你乱跑的手"变成"先把路线摆出来的助手"。
AI适合做的,是帮你把复杂任务拆开、解释清楚、跑你确认过的动作。它不适合在你完全不知道发生什么的时候,替你一路点下一步。
第十条,跑完以后要命令账单
项目跑起来以后,不要立刻关窗口。
让AI输出一份清单:它执行过哪些命令,改过哪些文件,装过哪些包,访问过哪些外部地址,哪些动作需要你后续清理。
这个东西像收据。平时不一定看,但出问题时救命。
你可以直接要求:
请输出本次会话执行记录,包括所有命令、修改文件、安装依赖、访问域名、创建进程、后台服务和建议清理项。不要省略失败命令。
别只要成功记录。失败命令有时候更关键。很多奇怪的问题,就是某条失败命令改了一半留下来的。
我自己的默认提示词
如果你嫌上面太散,可以直接复制下面这段,放在你让AI Agent跑陌生项目之前。

你现在要帮我检查并运行一个陌生项目。安全优先,不要直接执行任何高风险命令。
规则如下:
1. 不要直接运行远程下载后立即执行的脚本,例如curl | sh、wget | bash、iwr | iex。
2. install、init、setup失败后,不要自动尝试新的修复命令,先列计划等我确认。
3. 不读取、不复制、不打印真实密钥、token、cookie、SSH配置和.env文件。
4. 不修改全局配置、系统PATH、shell profile、Git全局配置、SSH配置和启动项。
5. 任何需要管理员权限的命令必须先停下来解释原因。
6. 执行前列出将要访问的外部域名和用途。
7. 执行前给出命令计划,包含目的、影响文件、风险等级和回滚方式。
8. 每执行一步后告诉我结果,不要连续自动执行多步。
9. 如果发现脚本会下载或执行外部内容,先展开内容并解释。
10. 完成后输出执行记录,包括命令、修改文件、安装依赖、访问域名和清理建议。
先只输出运行计划,不要执行。
这段提示词解决一个实际问题:让AI把目标设成"安全地跑起来"。
这段有两种用法。临时跑陌生仓库,把上面整段(含首尾两句)贴进对话框就行。想让它长期生效,去掉首尾两句,只留 10 条规则,放进你项目的 CLAUDE.md 或 AGENTS.md,每次开新会话自动生效。
常驻版本:
## AI Agent 运行陌生项目安全规则
1. 不要直接运行远程下载后立即执行的脚本(curl | sh、wget | bash、iwr | iex),先下载展开内容并解释。
2. install、init、setup 失败后不要自动尝试新的修复命令,先列计划等我确认。
3. 不读取、不复制、不打印真实密钥、token、cookie、SSH 配置和 .env 文件。
4. 不修改全局配置、系统 PATH、shell profile、Git 全局配置、SSH 配置和启动项。
5. 任何需要管理员权限的命令必须先停下来解释原因。
6. 执行前列出将要访问的外部域名和用途。
7. 执行前给出命令计划,包含目的、影响文件、风险等级和回滚方式。
8. 每执行一步后告诉我结果,不要连续自动执行多步。
9. 发现脚本会下载或执行外部内容时,先展开内容并解释。
10. 完成后输出执行记录,包括命令、修改文件、安装依赖、访问域名和清理建议。
最后说一句边界
这张清单不能保证百分百安全。安全这事没有一招鲜。
它能做的,是把AI Agent最容易失控的几个地方挡一下。自动执行、自动修复、自动放权、自动访问外部资源,这几样你盯住了,大部分坑就躲过去了。你不需要变成安全专家,至少先让AI慢下来,把手里的动作说清楚。
我的判断是,AI编程接下来,光看模型会不会写代码已经不够了,人会不会验收AI的动作更重要。以前我们担心AI写错,现在更得防它太努力。写错了你能看到报错,太努力了你未必看得见它干了什么。
工具越勤快,人越不能完全撒手。你要盯着它干了什么,确认没问题再放行。
验收的标准很简单:电脑没被搞乱。AI自己觉得"完成了",不算数。
飞书****开源知识库(实时更新 交流群):
https://tffyvtlai4.feishu.cn/wiki/OhQ8wqntFihcI1kWVDlcNdpznFf
每次我都想提醒一下,这不是凡尔赛,是希望有想法的人勇敢冲。
我不会代码,我英语也不好,但是我做出来了很多东西。
我真心希望能影响更多的人来尝试新的技巧,迎接新的时代。
谢谢你读我的文章。
如果觉得不错,随手点个赞、在看、转发三连吧🙂
如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章。