⚡

安全审计技能Skill security-audit

该技能用于安全审计,包括RLS验证、OWASP合规性检查和漏洞扫描,适用于软件开发中的安全验证和审计任务。关键词:安全审计、RLS验证、OWASP合规、漏洞扫描、软件开发安全。

安全审计 0 次安装 23 次浏览 更新于 3/15/2026

名称:安全审计 描述:RLS验证、安全审计、OWASP合规性和漏洞扫描。用于验证RLS策略、审计API路由或扫描安全问题。

安全审计技能

目的

指导安全验证,包括RLS强制执行、OWASP合规性和漏洞检测,遵循安全优先架构。

适用时机

在以下情况调用此技能:

  • 验证RLS策略
  • 审计API路由的认证
  • 漏洞扫描
  • 部署前安全审查
  • 检查暴露的凭证
  • 审查数据库访问模式

停止条件

禁止模式

// 禁止:直接Prisma调用(绕过RLS)
const users = await prisma.user.findMany();
// 必须使用:withUserContext、withAdminContext或withSystemContext

// 禁止:受保护路由缺少认证
export async function GET(req: Request) {
  // 在访问用户数据前没有认证检查
  return getUserData();
}

// 禁止:暴露的凭证
const API_KEY = "sk_live_abc123"; // 硬编码的秘密

// 禁止:SQL注入漏洞
const query = `SELECT * FROM users WHERE id = ${userId}`; // 插值

正确模式

// 正确:RLS上下文包装器
const users = await withUserContext(prisma, userId, async (client) => {
  return client.user.findMany();
});

// 正确:数据访问前的认证检查
export async function GET(req: Request) {
  const { userId } = await auth();
  if (!userId) {
    return new Response("未授权", { status: 401 });
  }
  return getUserData(userId);
}

// 正确:环境变量用于秘密
const API_KEY = process.env.STRIPE_SECRET_KEY;

// 正确:参数化查询
const user = await prisma.$queryRaw`SELECT * FROM users WHERE id = ${userId}`;

安全审计检查清单

1. RLS验证

  • [ ] 所有数据库操作使用上下文包装器
  • [ ] 路由处理程序中无直接Prisma调用
  • [ ] 用户隔离已验证(用户A无法看到用户B的数据)
  • [ ] 管理员操作正确限定范围
# 查找潜在的RLS绕过
grep -r "prisma\." --include="*.ts" app/ lib/ | grep -v "withUserContext\|withAdminContext\|withSystemContext"

2. 认证检查

  • [ ] 所有受保护路由验证认证
  • [ ] 数据访问前调用Clerk auth()
  • [ ] 未授权时有适当的401/403响应
# 查找缺少认证检查的路由
grep -r "export async function" --include="route.ts" app/ | head -20
# 手动验证每个都有认证检查

3. 凭证扫描

  • [ ] 代码中无硬编码的秘密
  • [ ] 客户端代码中无API密钥
  • [ ] 正确使用环境变量
# 扫描潜在的秘密
grep -rE "(sk_live|pk_live|password|secret|key)" --include="*.ts" --include="*.tsx" | grep -v "process.env\|.env"

4. 依赖漏洞

# 运行安全审计
npm audit
yarn audit

# 检查高/关键漏洞
npm audit --audit-level=high

5. 输入验证

  • [ ] 用户输入使用Zod模式验证
  • [ ] 无原始查询插值
  • [ ] 文件上传限制到位

OWASP Top 10 检查清单

风险 检查 状态
A01 访问控制失效 RLS强制执行,所有路由有认证 ☐
A02 加密失败 秘密仅在环境变量中 ☐
A03 注入 参数化查询,Zod ☐
A04 不安全设计 遵循认证优先模式 ☐
A05 错误配置 生产环境正确保护 ☐
A06 易受攻击依赖 npm audit清洁 ☐
A07 认证失败 Clerk集成正确 ☐
A08 数据完整性 RLS防止篡改 ☐
A09 日志记录失败 安全事件已记录 ☐
A10 SSRF 外部URL已验证 ☐

安全验证命令

# 完整安全检查
npm audit && yarn lint && echo "安全检查通过"

# RLS绕过检测
grep -r "prisma\." --include="*.ts" app/ lib/ | wc -l
# 与上下文包装器计数比较

# 秘密检测
git secrets --scan  # 如果安装了git-secrets
grep -rE "sk_|pk_|password=" . --include="*.ts"

部署前安全审查

在任何生产部署前:

  • [ ] npm audit显示无高/关键问题
  • [ ] RLS策略已验证
  • [ ] 无新的直接Prisma调用
  • [ ] 环境变量已记录
  • [ ] 迁移前已备份
  • [ ] 回滚计划已记录

安全审计报告模板

## 安全审计报告 - {{TICKET_PREFIX}}-XXX

### 摘要

- **日期**: [日期]
- **审计员**: 安全工程师
- **范围**: [审计内容]

### 发现

| 严重性 | 问题 | 位置 | 状态 |
| ------ | ---- | ---- | ---- |
| 高     | ...   | ...  | 已修复 |
| 中     | ...   | ...  | 未解决 |

### RLS验证

- [x] 所有表已启用RLS
- [x] 用户隔离已验证
- [x] 管理员策略正确限定范围

### 推荐

1. [推荐]
2. [推荐]

### 批准

- [ ] 安全工程师批准
- [ ] 准备部署

权威参考

  • 安全架构: docs/guides/SECURITY_FIRST_ARCHITECTURE.md
  • RLS实现: docs/database/RLS_IMPLEMENTATION_GUIDE.md
  • RLS策略: docs/database/RLS_POLICY_CATALOG.md
  • OWASP Top 10: https://owasp.org/Top10/