
就现在AI模型的能力而言。
要用 AI 来写代码,现在真的很快。
但快归快。
甚至现在到处都充斥着大量的所谓的vibe coding的作品。
然而,有件事很少有人在意:AI 写出来的东西,到底安不安全?
前两天 OpenAI 开源了一个叫 @openai/codex-security 的安全扫描工具。

核心功能是:你把代码仓库丢给它,它用 AI 自动读代码、找漏洞、验证漏洞是否真实可利用,然后给你出修复建议。
使用也很简单,就一条命令:
npx @openai/codex-security scan .圈子里吹得挺响。
但是俗话说得好:是骡子是马,拉出来遛遛。
为此,我特意写了一个"故意不安全"的演示页,把新手 Vibe Coding 最容易踩的 8 个安全坑全埋进去,然后用这个工具扫,看它能揪出多少。
@openai/codex-security 是 OpenAI 开源的安全扫描 CLI 和 TypeScript SDK。
底层跑的是 AI 模型(默认 GPT-5.6,也支持接 OpenRouter、Claude、AWS Bedrock 等)。
它跟传统的静态扫描工具不一样。
传统工具靠规则匹配,只认识"已知漏洞的固定写法"。
这个工具靠 AI 读懂代码逻辑,能发现上下文相关的问题,比如"这段鉴权写了,但放行判断没咬死"这类传统工具根本看不出来的坑。
支持三种扫描深度,从快速粗扫到深度多 Agent 协同全量扫,视项目大小和需求选。
当然,作为谨慎的韩天尊粉丝,我肯定不能直接拿真项目冒险。
为此,我直接临时写了一个演示用的运营看板:有登录页、成员后台、搜索、导出、上传。
看起来像能用的内部中台。

工作台总览
但是实际上,这是我故意埋坑的页,其中包含 8 个经典安全漏洞,全部亲手写进代码。
目的只有一个:给扫描工具设一个有标准答案的考场。
下面先过一遍我埋了什么,再说扫出来了什么。
app.js 里直接写死了一个 OpenAI 密钥字符串和内部服务器路径,然后在首页通过 DOM 直接展示出来。
const DEMO = { secrets: { openaiKey: 'sk-demo-THIS-IS-FAKE-BUT-LOOKS-REAL-1234567890abcdef', serverPath: 'E:\\prod\\ops-board\\secrets\\config.json' } };
集成配置明文密钥
别人打开开发者工具,三秒钟拿走。
搜索结果回显时,用了 innerHTML 直接拼入用户输入:
flash.innerHTML = `已为你匹配关键词:<b>${q}</b>`;用户输入什么,页面原样执行。

搜索注入演示
=== 直接比对登录校验写在浏览器端 JS 里,密码用明文 === 对比:
const expected = DEMO.users[username]; // 'admin': '123456' if (expected && expected === password) { ... }
登录页
任何人打开 DevTools 都能看到用户名密码对照表。
登录失败时,错误信息里拼了内部文件路径和鉴权方式:
error: `认证失败:AuthService.verify @ ${DEMO.secrets.serverPath}:88 | 期望哈希算法=plain-text-compare`
登录失败过细报错
admin.html 的鉴权逻辑用了 requireLoginSoft(),但这个函数只是读了一下 localStorage,没有拦截,不管有没有 token 都让你进:
function requireLoginSoft() { return getToken(); // 有就返回,没有就返回 null,页面继续跑 }
未登录直开后台
登录成功后,所有角色看到的是同一张成员全表,访客和管理员的权限没有任何区分。

登录后敏感成员表
export.html 的导出数据里埋了两个公式注入字符串:
{ note: '=cmd|\'/C calc\'!A0' }, { note: '=HYPERLINK("https://evil.example","点击查看")' }导出后用 Excel 打开,可能被当成公式执行。

CSV公式注入预览
upload.html 没有任何文件类型或扩展名校验,默认文件名甚至写死成了 shell.php.jpg:
msg.innerHTML = `上传成功 · 已保存为 <b>shell.php.jpg</b>`;
上传无校验成功态
靶子设好了,把这个仓库丢给 @openai/codex-security:
npm install @openai/codex-security npx @openai/codex-security login npx @openai/codex-security scan .扫描过程不是"跑个规则对比",是真的有 AI 在读你的代码逻辑。
速度不算快,跑完一个中等项目大概几分钟。
结果:
8 个坑里,它明确识别出了 6 个,给出了具体文件位置、漏洞描述和修复建议。
漏掉的 2 个是:
命中率 6/8,如果算上半命中的坑 5,是 6.5/8。
有没有误报?有一个。
它把 exportCsvWithFormulaRisk 这个函数名本身也标成了一个风险点,理由是"函数名暗示存在未处理的公式风险"。
这个……确实是我故意起的名字,不算冤枉。
修复建议靠不靠谱?
明文密钥那条,它直接给出了建议:把 secrets 对象移出前端代码,改成从服务端接口动态获取,或者用环境变量注入,并且指出了具体是 app.js 第 10-12 行。
XSS 那条,建议把 innerHTML 改成 textContent,或者对用户输入做 HTML 转义。代码示例也给了。
这个质量,比我见过的很多静态扫描报告强。
工具是真有用的。
对于个人开发者、独立开发者、或者用 AI Vibe Coding 做产品的人来说:
以前发现不了的问题,靠规则扫;现在发现不了的问题,靠逻辑扫。
这个工具做到了后者。
但两个现实要说清楚:
结论:
如果你在用 Vibe Coding 做产品,上线前跑一遍 codex-security scan . 是值得的。
比裸着上线要强,而且强很多。
这 8 个坑的完整代码我整理成了仓库,可以拉下来自己测。
评论区扣:安全扫描
我发你链接。
你现在用 AI 做产品多吗?上线前有没有做过安全检查这一步?来评论区说说,我看看大家的真实情况是什么。
我是小机。 专注 AI 编程 / 智能体 / 系统提效。 关注我,一起把 AI 用进能验收的结果里。
点击上方名片,关注「小机AI大模型」,第一时间收到 AI 实战干货推送
PS:想聊聊怎么搭自己的 AI 系统、怎么写 AGENTS.md,欢迎加入小机的「AI交流群」。