安全审计 Prompt:让 AI 找出代码里的安全漏洞
把代码粘进来,AI 按 OWASP Top 10 逐项检查:SQL 注入、XSS、CSRF、认证绕过、密钥泄露、路径穿越,输出带行号的修复建议和安全补丁代码。适合 Claude / Cursor / ChatGPT / GLM。
用法
把需要审计的代码粘进来。适合 review 一个文件或一个模块,不要一次粘整个项目。
Prompt
你是一个应用安全专家。请对以下代码进行安全审计,按 OWASP Top 10 逐项检查。
## 代码
{{粘贴代码}}
## 技术栈
- 语言:{{Python / JavaScript / Go / Java}}
- 框架:{{Express / FastAPI / Django / Spring}}
- 数据库:{{PostgreSQL / MySQL / MongoDB}}
## 检查清单
### A01 — 访问控制失效
- 未授权可访问的接口
- 越权(水平/垂直)风险
- IDOR(不安全直接对象引用)
### A02 — 加密失败
- 明文传输敏感数据
- 弱加密算法(MD5、DES)
- 硬编码密钥/密码
### A03 — 注入
- SQL 注入(拼接 SQL 语句)
- 命令注入(拼接 shell 命令)
- LDAP/XPath 注入
### A04 — 不安全设计
- 敏感操作缺少速率限制
- 缺少 CSRF 防护
- 不安全的文件上传
### A05 — 安全配置错误
- 调试模式未关闭
- 不安全的默认配置
- 错误信息泄露堆栈
### A06 — 易受攻击的组件
- 已知漏洞的依赖版本
### A07 — 认证失败
- 弱密码策略
- 会话管理缺陷
- JWT 配置问题
### A08 — 数据完整性失败
- 反序列化漏洞
- 不安全的 CI/CD
### A09 — 日志监控不足
- 安全事件未记录
- 日志包含敏感信息
### A10 — SSRF
- 服务端发起未验证的 HTTP 请求
## 输出格式
对每个发现:
- **[严重度] 漏洞类型 — 文件:行号**
- 问题描述:为什么这是漏洞
- 攻击场景:怎么利用
- 修复建议:给出修复后的代码
如果没有发现问题,明确写「未发现 A0X 风险」。
严重度定义
- 严重 — 可直接被利用,导致数据泄露或 RCE
- 高危 — 需要特定条件才能利用,但影响严重
- 中危 — 增加攻击面,但单独无法直接利用
- 低危 — 最佳实践问题,建议修复
为什么有效
- 按技术栈限定检查清单:通用清单会给出一堆你框架里根本不存在的风险,噪音大到没人看;限定栈之后命中率陡增。
- 要求给可复现的 PoC 思路:只有「这里有 SQL 注入」没有「怎么触发」,开发无法验证、也无法判断优先级。
- 严重度定义写进 prompt:不同 Agent 对「高危」的理解差三个等级,不定义就无法排序。
进阶(自动化)
把审计接进 PR 流程,但只卡「严重」级别,避免噪音导致忽略:
changed=$(git diff --name-only origin/main...HEAD -- "*.ts" "*.py")
[ -n "$changed" ] && ai-audit --files "$changed" --min-severity high
更完整的自动化方案见 AI 代码审查工具横评 与 安全审计 Prompt 的配套工作流。
反例(AI 默认会写的烂版本)
默认输出:「建议使用参数化查询」「注意 XSS 风险」「确保做好权限校验」——正确的废话,没有文件行号也没有触发路径。
加了 prompt 之后:[严重] src/user/repo.ts:31 — SQL 字符串拼接,入参来自 req.query.sort;触发:GET /users?sort=id;DROP TABLE users;修复:改用参数化查询或白名单映射字段名。
延伸阅读
- Staff 级 Code Review Prompt · PR Review 第一道筛 — 通用审查里也覆盖安全项
- 搭一条自动化 PR Review 流水线 — 把安全审查接进 CI 阻断合并
- AI 代码审查工具横评 — 带安全扫描的自动化工具