CodeAuditAgent
全部文章
  • 安全
  • OWASP
  • 检查清单

2026 年代码审查必查的十大漏洞

一份实用检查清单:每次代码审查都值得排查的十类漏洞,对应 OWASP Top 10 与 CWE,并附上每类漏洞的一句话修复方法。

· 阅读约 9 分钟 · Lina Source LLC

大多数安全事件仍然源于少数几类众所周知的漏洞。框架变得更安全了,但错误只是换了位置:转移到了 API 处理函数、后台任务、基础设施代码以及服务之间的胶水代码中。下面是我们每次审计时最先检查的清单,并标注了你会在 CodeAuditAgent 报告中看到的 CWE。

1. 访问控制失效(CWE-639、CWE-862)

这是迄今为止最常见的严重问题:某个接口按 ID 加载记录,却没有检查该记录是否属于调用者。身份认证只能告诉你对方是谁,而授权检查必须在每一次查询中执行。

// Scope every lookup to the owner
const invoice = await db.invoice.findFirst({
  where: { id, userId: session.user.id },
});

2. 注入(CWE-89、CWE-78)

通过字符串拼接构造的 SQL、Shell 命令和模板表达式依然随处可见,通常藏在某人为了性能而手写的那条查询里。请使用参数化查询,或以数组形式传递参数;永远不要拼接输入。

3. 硬编码密钥(CWE-798)

提交到代码仓库的 API 密钥、后来发现仍然有效的测试令牌、配置文件中的私钥。请将它们迁移到环境变量或密钥管理服务中,并轮换所有曾经被提交过的密钥:删除那一行代码并不会删除历史记录。

4. 服务端请求伪造(CWE-918)

任何会请求用户提供的 URL 的功能,例如 Webhook、链接预览或导入,都可能被指向你的内网或云元数据端点。请对主机使用允许列表,解析并校验 IP,同时屏蔽私有地址段。

5. 跨站脚本(CWE-79)

现代框架默认会进行转义,因此 XSS 如今藏在绕过转义的地方:原始 HTML 属性、Markdown 渲染器,以及放进 href 属性的 URL。请使用经过验证的库来净化 HTML,并拒绝 javascript: URL。

6. 不安全的反序列化与 eval(CWE-502、CWE-95)

Pickle、YAML load、Java 对象流和动态 eval 会把数据变成代码。请改用安全的加载器和经过 Schema 校验的 JSON。

7. 弱加密(CWE-327、CWE-330)

用 MD5 或 SHA-1 存储密码、使用固定 IV、用 Math.random() 生成令牌。请使用专为密码设计的哈希算法(Argon2id、bcrypt、scrypt),以及密码学安全的随机数源。

8. 开放重定向(CWE-601)

接受任意 URL 的 next 或 returnTo 参数,会让你的域名成为钓鱼攻击的可信跳板。只接受同源的相对路径。

9. 缺少速率限制(CWE-307、CWE-770)

登录、密码重置、OTP,以及任何会产生费用的接口(邮件、短信、AI 调用),都需要按用户和按 IP 进行限制。没有这些限制,暴力破解和恶意刷量导致的账单暴涨攻击将轻而易举。

10. 安全配置错误(CWE-16)

允许携带凭据的通配符 CORS、生产环境开启调试模式、过于详细的堆栈跟踪、过于宽松的存储桶策略。这些问题存在于配置中,在代码审查时很少被当作缺陷看待,而这恰恰是它们应该像代码一样被审查的原因。

如何使用这份清单

  • 每个拉取请求都检查第 1 到第 3 类:它们影响最大,也最容易被遗漏。
  • 把基础设施和 CI 配置当作需要审查的代码。
  • 为每个问题记录 CWE,以便跟踪修复情况并衡量趋势。