如果 vibe-coder 只能记住一份 web 安全清单,就记 OWASP Top 10。它不是”高级渗透技巧”,是最常见的 10 类翻车现场——99% 的网站被攻破,都没跳出这 10 条。

这一篇放在 IAM 那一篇之后,因为 Top 10 的第 1 名就是”访问控制失效”——直接对应 IAM 没做好。


顶层结论

  • OWASP 是非营利组织,所有产物免费开源,业界标准
  • Top 10 每 3-4 年更新一版,当前是 2021 版(2025 版仍在草案)
  • vibe-coder 用法:让 AI 写完代码后,逐条对照 Top 10 自查——这比单元测试更能挡安全事故

速查表(先看这个)

#名字一句话vibe-coder 最易踩
A01Broken Access Control看了不该看的API 不检查 owner
A02Cryptographic Failures加密用错了用 MD5 存密码
A03Injection输入直接拼命令SQL 字符串拼接
A04Insecure Design设计就不安全6 位邀请码
A05Security Misconfig配置错了生产开 DEBUG
A06Vulnerable Components第三方包过期不跑 audit
A07Auth Failures登录系统弱自己写登录
A08Integrity Failures来源没校验CDN 不加 SRI
A09Logging Failures出事看不见不记权限拒绝
A10SSRF替攻击者发请求用户输 URL 不过滤

下面逐条展开,需要细节再往下看。


OWASP 是什么

Open Worldwide Application Security Project——开放全球应用安全项目。

  • 形态:非营利基金会,全球志愿者社区
  • 产物:全部 免费 + 开源
  • 影响力:几乎每个 web 安全岗 JD 都写”familiar with OWASP Top 10”

几个常被引用的 OWASP 产出

名字是什么
Top 10web 应用最高危 10 类漏洞,行业事实标准
Top 10 for LLM大模型应用的 Top 10(prompt injection 等)
ASVS应用安全验证标准,做 audit / 合规用
Cheat Sheet Series每个具体技术(JWT、CORS、Session…)一张速查
ZAP开源 web 漏洞扫描器,和商业产品同级
SAMM软件保证成熟度模型,衡量团队 AppSec 成熟度

OWASP Top 10(2021 版)逐条解释

按风险从高到低,每条配:它在说什么 / AI 容易踩在哪 / 怎么自查

A01:2021 — Broken Access Control(访问控制失效)

在说什么:用户能访问不该访问的东西。例如登录后直接改 URL 里的 ?user_id=1 看到别人的资料。

AI 容易踩:写 API 时只检查”登录了没”,不检查”这个东西归不归你”

自查:每个返回数据的接口,问一遍——这个资源的 owner 是不是当前用户? 如果不是,有没有显式授权?

参考 IAM 文章里的 RBAC

A02:2021 — Cryptographic Failures(加密失败)

在说什么:该加密的数据没加密、或者加密用错了算法。

AI 容易踩:用 MD5 / SHA-1 存密码、HTTP 传敏感数据、密钥写死在代码里。

自查:

  • 密码存的是 bcrypt / argon2,不是 SHA-256(参考 hash 文章)
  • 全站强制 HTTPS
  • 密钥放 环境变量 / secret manager,不在 git 里

A03:2021 — Injection(注入攻击)

在说什么:把用户输入直接拼到 SQL / shell / LDAP 命令里——攻击者把命令塞进输入框。最典型是 SQL InjectionXSS

AI 容易踩:"SELECT * FROM users WHERE name='" + userInput + "'"——经典死法。

自查:看 AI 写的数据库查询是不是用 参数化查询 / prepared statement,看 HTML 渲染是不是 escape 了用户输入。

A04:2021 — Insecure Design(设计就不安全)

在说什么:不是 bug,是设计错了。例如”忘了密码”用手机号验证,但手机号可以随便改——再多代码 review 也救不了。

AI 容易踩:做”邀请码”系统时,邀请码用 6 位数字——攻击者直接 brute force。

自查:写代码前先画 threat model——这个流程谁可能滥用?攻击者最便宜的攻击是啥?

A05:2021 — Security Misconfiguration(配置错误)

在说什么:用了默认密码、开了 debug 模式上线、错误信息把 stack trace 泄露给用户。

AI 容易踩:.env 提交到 git、生产服务器开着 DEBUG=True、CORS 配成 *

自查:

  • 生产环境 DEBUG 必须关
  • CORS 不能用 *,必须白名单
  • .env.gitignore
  • 默认账号密码全改掉(数据库 root、admin 面板)

A06:2021 — Vulnerable and Outdated Components(用了有漏洞的第三方组件)

在说什么:你的代码没漏洞,但你 npm install 的包有漏洞。

AI 容易踩:装一堆三年没更新的依赖,从来不跑 audit。

自查:

  • 定期跑 npm audit / pip-audit / cargo audit
  • Dependabot / Renovate 自动 PR 升级
  • 砍掉所有”看着用一次就再没碰过”的依赖

A07:2021 — Identification and Authentication Failures(认证失效)

在说什么:登录系统弱——密码可以暴力破解、session 不过期、忘了密码功能可被绕过。

AI 容易踩:自己实现登录、session 永不过期、登录失败次数不限制。

自查:别自己写登录——用 SSO / IdP(参考 SSO+MFA 文章)。如果一定要自己写:加 rate limit、加 MFA、session 设过期。

A08:2021 — Software and Data Integrity Failures(完整性失效)

在说什么:代码或数据来源没校验。例如从 CDN 加载 <script> 没加 SRI、CI/CD 的部署 token 被偷、用 pickle.loads 反序列化不可信数据。

AI 容易踩:让 <script src="https://some-cdn.com/lib.js"> 直接上,没加 integrity= 校验。

自查:

  • 外部 JS 加 SRI(Subresource Integrity)
  • 反序列化只接受白名单类型
  • CI/CD 的密钥用 OIDC 短期凭据,不是写死的 long-lived token

A09:2021 — Security Logging and Monitoring Failures(日志和监控失效)

在说什么:出事了你根本不知道。没日志 = 没线索 = 没法响应。

AI 容易踩:登录失败、权限拒绝、敏感操作通通不记日志。

自查:至少记这四类——

  1. 登录成功 / 失败(含 IP)
  2. 权限拒绝
  3. 敏感操作(改密码、改邮箱、删数据)
  4. 服务端错误(5xx)

参考 日志

A10:2021 — Server-Side Request Forgery (SSRF)

在说什么:让服务器替你发请求——攻击者借此扫内网、访问 cloud metadata 服务偷凭据。

AI 容易踩:写”输入 URL 我帮你抓预览”功能时,不过滤目标地址——攻击者输入 http://169.254.169.254/ 拿到 AWS 临时凭据。

自查:

  • 用户能输入的 URL 必须白名单,或至少黑名单内网网段(127.0.0.0/8 10.0.0.0/8 169.254.0.0/16)
  • 云上跑的服务,禁用 IMDSv1,只用 IMDSv2

概念关联

这一篇放在系列里