安全审计Skill security-audit

这个技能专用于安全审计,帮助验证行级安全策略、确保API路由的认证、扫描系统漏洞,并遵循安全优先的架构。适用于RLS策略验证、OWASP合规检查、漏洞扫描和安全代码审查。关键词:安全审计,RLS验证,OWASP合规,漏洞扫描,代码审查,安全评估。

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

name: 安全审计 description: 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. 认证检查

  • [ ] 所有受保护路由验证认证
  • [ ] 在数据访问前调用认证提供者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审计清洁
A07 认证失败 认证集成正确
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审计显示无高/严重问题
  • [ ] 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/