安全审计技能Skill security-audit

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

安全审计 0 次安装 0 次浏览 更新于 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/