随着 AI 编程能力越来越强,我们使用 AI 的方式从代码补全,到让它编写整个文件,再到现在几乎不需要关心代码细节就能实现完整的功能。但 vibe coding 带来的代码安全问题一直不少,比如数据库泄露、API key 泄露、SQL 注入、远程命令执行、敏感信息泄露这一类。

之前我在一个 vibe coding 的群里,有群友分享了一个文字策略类游戏,是用 DeepSeek 的模型做的。我试玩的时候发现速度很慢,就打开浏览器控制台查看了请求,发现它的请求是直接在前端发出的,API key 明文写在请求头里,任何人都可以复制走。这位群友是 vibe coding 的新手,游戏本身做得挺有意思,我当时马上在群里提醒他 key 已经泄露,让他尽快轮转并删除旧的 key。

群友游戏的 API key 直接暴露在前端请求头里

现在模型能力增强以后,这类基础问题少了一些。但只要一直用 AI 迭代代码而不检查安全问题,漏洞还是很多。不管是新手 vibe coding 一个应用,还是专业开发者开发企业级项目,代码安全都需要重视。即便是懂开发的前端或后端工程师,对代码安全的理解相比专业的网络安全工程师也是比较片面的。

Qoder Security 是什么

最近 Qoder 发布了一个新功能 Qoder Security,把代码安全防护做成了一个正式的产品功能。这是我第一次见国内的 Agent 产品这样做。Qoder 本身是一个 vibe coding 工具,它把 security 作为核心产品功能之一,提供了三个扫描能力:静态工程扫描、轻量扫描和深度扫描。Qoder 的官方文档里有完整说明。

Qoder 官方文档的 Security 说明页

入口在 Qoder 的设置里:打开 Settings,左侧导航栏有一个 Security 项,点进去就能看到三个开关。

Qoder 设置里的 Security 配置,三个扫描级别都可以单独开关

三个扫描级别的区别

  • Static Check(L1,免费):通过正则和高危模式匹配扫描存量代码,检查那些从代码层面就能直接发现的问题,比如高危的函数调用,相对静态。除了扫描存量代码,它也会在 AI 编写代码或者调用工具之后快速执行匹配,防止某次操作引入了有安全影响的代码,命中的问题可以自动修复。
  • Lightweight Scan(L2):针对本次新写的增量代码理解代码语义,识别 SQL 注入、远程命令执行、敏感信息泄露这类风险。它在每次工具调用时自动执行,一般在一轮对话快要完成的时候运行。
  • Deep Scan(L3):基于整个增量代码或者整个代码仓库,分析代码含义以及相关联的业务。比如某个模块新增了几个文件,它扫描时不只看这几个文件,还会关联相关业务,跨文件、跨函数追踪完整的数据流。只看单个文件时很难发现这种隐藏的跨文件漏洞。它适合在提交或者推送代码之前使用。

以前的安全检查通常就是第一种,用正则或者模式匹配拦掉一些比较明显的风险。Qoder 官方文章提到,这套能力基于一个自研的安全检查大模型,效率和准确度会比普通模型直接检查更好;他们内部测试在 Claude Code、Codex 这类基础设施和组件上发现了 600 多个安全问题。

实际扫一个项目

我在 Qoder 里打开了自己以前写的一个项目 Textwell,它是一个文本优化应用。

在 Qoder 的 Quest 界面打开 text-well 项目

这个应用的界面是右侧一个文本输入框,左侧执行文本扫描这一类的检查。这种有文本输入框的应用最容易被各种注入,因为输入的形式太广泛了。

Textwell 应用界面,右侧是文本输入区

在对话框里输入 /security-scan,调用这个 Skill 之后,它会先问要运行哪种扫描:A 是深度评审上次评审基线以来的提交,适合发布前;B 是快速检查当前工作区的改动;C 是云端扫描整个仓库或者指定的文件目录;D 是自定义。我选择 C,扫描整个代码仓库。

输入 /security-scan 后选择扫描级别

第二个问题是扫描哪些文件,我让它自己找需要扫描的。因为我的仓库比较大,代码太多,它没有办法一次性全部扫完,就自己去寻找风险比较高的位置分批扫描。第一批它挑了最高风险的核心 API 文件,包括图片代理接口(SSRF 风险面)、支付 webhook、兑换码鉴权、登录态同步和支付下单接口,结果是 No security issues found。

第一批扫描了最高风险的核心 API 文件,没有发现问题

我让它再扫一批,第二批覆盖了 AI 流式接口、支付订阅相关的接口和定时任务,结果同样是 No security issues found。剩下没扫的是一些风险更低的路由。

第二批扫描了 AI 流式接口和支付订阅接口,也没有发现问题

这个仓库是已经上线的产品,上线之前我自己针对性优化过一波安全问题,所以这次扫描没有发现问题,也说明它目前的质量还可以。但很多产品没有这样的风险意识,尤其是现在用 AI 编程的新手越来越多。把安全检查做成产品的内置功能之后,AI 在写代码的时候就能尽可能帮我们规避和修复问题。对自己开发并上线一个生产应用来说,扫描确认没有问题之后,心智负担会小很多。