Claude Code 系统提示词里的安全底线:从 OWASP Top 10 说起
有时候,真正影响一个工程质量的,不是代码本身,而是"写代码的人脑子里那一套规则"。
最近在翻 Claude Code 的系统提示词时,我看到一句非常"朴素但致命"的话:
Be careful not to introduce security vulnerabilities such as command injection, XSS, SQL injection, and other OWASP top 10 vulnerabilities. If you notice that you wrote insecure code, immediately fix it. Prioritize writing safe, secure, and correct code.
译文
请务必小心,不要引入安全漏洞,例如命令注入、XSS、SQL注入以及其他OWASP Top 10中的漏洞。如果你发现自己编写了不安全的代码,请立即修复。优先编写安全、可靠且正确的代码。
这句话看起来像废话,但实际上,它指向的是整个软件工程里最容易被忽视、却最昂贵的一件事:安全。
而这句话背后的"参考答案",就是 OWASP 发布的经典安全基准 ------
OWASP Top 10:2025。
地址:https://owasp.org/Top10/2025/
一、一个真实感很强的故事
很多年前,一个电商系统上线。
功能很完整:
- 下单 ✔
- 支付 ✔
- 后台 ✔
但上线一周后,运营发现一件怪事:
有用户可以"看见别人的订单"。
问题最终定位到一个非常简单的代码:
SELECT * FROM orders WHERE user_id = ?
问题是:这个 user_id 是前端传的。
没有校验,没有权限判断。
这就是经典的:
👉 Broken Access Control(访问控制失效)
也就是 OWASP Top 10 的第一名。
二、OWASP 是什么?为什么它很重要
OWASP 是一个全球性的安全社区,它做了一件非常重要的事情:
👉 把"最常见、最危险"的 Web 安全问题整理成榜单。
这就是 OWASP Top 10。
你可以把它理解成:
Web 安全界的"高频踩坑排行榜"
而 Claude Code 把它写进系统提示词,本质是在做一件事:
👉 把安全左移(Shift Left)------在写代码时就避免问题
三、OWASP Top 10:2025,用人话讲一遍
下面我不按"安全术语",而是按"开发者视角"来讲。
A01:访问控制失效(Broken Access Control)
本质问题:你不该看到的东西,看到了
常见场景:
- 修改 URL 看别人的数据
- 越权操作(普通用户调用 admin 接口)
👉 最佳实践:
- 后端永远做权限校验(不要信前端)
- 使用 RBAC / ABAC 权限模型
A02:安全配置错误(Security Misconfiguration)
本质问题:系统"裸奔"
比如:
- 默认密码没改
- debug 模式上线
- S3 / OSS 公共读写
👉 最佳实践:
- 环境隔离(dev / test / prod)
- 配置中心统一管理
- 上线 checklist
A03:供应链安全问题(Software Supply Chain Failures)
本质问题:你依赖的库有毒
比如:
- 引入一个带后门的 npm 包
- 使用已知漏洞的依赖
👉 最佳实践:
- 使用依赖扫描工具(SCA)
- 锁版本(lockfile)
- 只信任官方源
A04:加密失败(Cryptographic Failures)
本质问题:加密了,但没完全加
比如:
- 明文存密码
- 自己实现加密算法
- 使用过时算法(MD5)
👉 最佳实践:
- 使用成熟库(bcrypt / AES)
- 强制 HTTPS
- 不自己造轮子
A05:注入(Injection)
本质问题:用户输入"变成代码执行"
经典:
- SQL 注入
- XSS
- 命令注入
👉 示例:
SELECT * FROM users WHERE name = '" + input + "'
👉 最佳实践:
- 使用参数化查询(PreparedStatement)
- 输出编码(防 XSS)
- 禁止拼接命令
A06:不安全设计(Insecure Design)
本质问题:从设计上就错了
比如:
- 没有风控机制
- 没有限流
- 没有防刷
👉 最佳实践:
- 威胁建模(Threat Modeling)
- 设计阶段就考虑攻击路径
A07:认证失败(Authentication Failures)
本质问题:登录系统太"宽松"
比如:
- 密码无限次尝试
- session 不安全
- token 可预测
👉 最佳实践:
- 多因素认证(MFA)
- 登录限流
- JWT 正确签名
A08:数据完整性问题(Integrity Failures)
本质问题:数据被篡改但你不知道
比如:
- 下载包被替换
- 配置被恶意修改
👉 最佳实践:
- 签名校验
- 哈希验证
- CI/CD 安全
A09:日志与监控失败(Logging Failures)
本质问题:被攻击了,但你毫无察觉
👉 最佳实践:
- 关键操作必须打日志
- 接入告警系统(如 SIEM)
- 日志不可篡改
A10:异常处理不当(Mishandling Exceptions)
本质问题:错误信息"泄露机密"
比如:
- 把 SQL 报错直接返回前端
- 暴露堆栈信息
👉 最佳实践:
- 统一异常处理
- 用户只看到"友好错误"
- 详细信息写入日志
四、Claude Code 为什么强调这一点?
回到最开始那句提示词。
AI 写代码的最大问题不是"不会写",而是:
👉 它会写"看起来对,但实际上危险"的代码
比如:
- 拼 SQL ✔
- 没权限校验 ✔
- 没输入校验 ✔
Claude Code 把 OWASP 写进系统提示,本质是在强制 AI:
不只是"能跑",还要"能活得久"。
五、实战建议(给新手的安全 checklist)
如果你刚开始写后端,这里是一份"够用但关键"的 checklist:
1. 输入永远不可信
- 校验参数
- 过滤非法字符
2. 不拼接 SQL
- 用 ORM / PreparedStatement
3. 权限校验必须在后端
- 不相信前端
4. 不暴露错误细节
- 统一异常处理
5. 使用成熟库
- 不自己实现加密、鉴权
6. 所有接口都要有日志
- 特别是登录、支付、修改操作
六、应用场景
OWASP Top 10 几乎适用于所有系统:
- 电商系统(防越权、订单泄露)
- SaaS 系统(多租户隔离)
- API 平台(防注入、鉴权)
- AI 应用(Prompt Injection 也类似注入攻击)
- 内部管理系统(权限控制最容易出问题)
七、总结
OWASP Top 10 并不是一份"安全专家指南",而是:
每个开发者都应该掌握的最低安全常识
Claude Code 把它写进系统提示词,其实是在提醒一件事:
👉 安全不是上线之后补的,是写第一行代码时就决定的