⚡

安全审计Skill security-audit

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

安全审计 0 次安装 18 次浏览 更新于 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. 认证检查

  • [ ] 所有受保护路由验证认证
  • [ ] 在数据访问前调用认证提供者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/