Firebase代码安全审计与验证Skill firebase-development-validate

Firebase代码安全审计与验证技能,用于对Firebase后端项目进行全面的安全审查、架构评估和最佳实践检查。该技能专注于Firebase安全规则验证、云函数架构审查、身份验证实现审计、模拟器配置检查以及生产就绪性评估。关键词:Firebase安全审计,Firebase代码审查,Firestore规则验证,云函数架构,Firebase身份验证,模拟器配置,生产部署检查,后端安全最佳实践。

Serverless 0 次安装 0 次浏览 更新于 2/28/2026

name: firebase-development-validate description: 当需要根据安全模型和最佳实践审查Firebase代码时,应使用此技能。触发词包括“review firebase”、“check firebase”、“validate”、“audit firebase”、“security review”、“look at firebase code”。验证配置、规则、架构和安全性。

Firebase代码验证

概述

此子技能根据已验证的模式和安全最佳实践验证现有的Firebase代码。它检查配置、规则、架构一致性、身份验证、测试和生产就绪性。

关键原则:

  • 根据选定的架构模式进行验证
  • 彻底检查安全规则
  • 验证测试覆盖率是否存在
  • 审查生产就绪性

此子技能适用场景

  • 对Firebase项目进行代码审查时
  • 审计安全实施时
  • 准备生产部署时
  • 用户说:“review firebase”、“validate”、“audit firebase”、“check firebase code”

不适用于:

  • 初始设置 → firebase-development:project-setup
  • 添加功能 → firebase-development:add-feature
  • 调试活动错误 → firebase-development:debug

TodoWrite工作流程

创建包含以下9个步骤的清单:

步骤1:检查firebase.json结构

验证必需部分:

  • hosting - 存在数组或对象
  • functions - 源目录、运行时、预部署钩子
  • firestore - 规则和索引文件
  • emulators - 本地开发配置

检查托管模式是否与实现匹配(site:、target: 或 single)。

参考: docs/examples/multi-hosting-setup.md

步骤2:验证模拟器配置

关键设置:

{
  "emulators": {
    "singleProjectMode": true,
    "ui": { "enabled": true }
  }
}

验证所有正在使用的服务都有模拟器条目。

参考: docs/examples/emulator-workflow.md

步骤3:审查Firestore规则

检查:

  • 顶部的辅助函数(isAuthenticated()isOwner()
  • 一致的安全模型(仅服务器写入 或 客户端写入验证)
  • 客户端写入使用 diff().affectedKeys().hasOnly([...])
  • 如果使用 collectionGroup() 查询,则检查集合组规则
  • 底部的默认拒绝规则

参考: docs/examples/firestore-rules-patterns.md

步骤4:验证Functions架构

识别正在使用的模式:

  • Express: 检查 middleware/tools/、CORS、健康端点
  • 领域分组: 检查导出、领域边界、shared/
  • 独立: 检查每个文件一个函数的结构

关键: 不要混合模式。验证整个项目的一致性。

参考: docs/examples/express-function-architecture.md

步骤5:检查身份验证实现

对于API密钥:

  • 中间件使用项目前缀验证密钥格式
  • 使用 collectionGroup('apiKeys') 查询
  • 检查 active: true 标志
  • userId 附加到请求

对于Firebase Auth:

  • 函数检查 request.auth.uid
  • 角色查找使用Firestore用户文档
  • 客户端在开发中连接到身份验证模拟器

参考: docs/examples/api-key-authentication.md

步骤6:验证ABOUTME注释

所有 .ts 文件应以以下内容开头:

// ABOUTME: 此文件功能的简要描述
// ABOUTME: 第二行提供额外上下文
grep -L "ABOUTME:" functions/src/**/*.ts  # 查找缺失

步骤7:审查测试覆盖率

检查:

  • 单元测试:functions/src/__tests__/**/*.test.ts
  • 集成测试:functions/src/__tests__/emulator/**/*.test.ts
  • vitest.config.tsvitest.emulator.config.ts 存在
  • 满足覆盖率阈值(60%+)
npm test && npm run test:coverage

步骤8:验证错误处理

所有处理程序必须:

  • 使用 try-catch 块
  • 返回 { success: boolean, message: string, data?: any }
  • 使用适当的HTTP状态码(400、401、403、500)
  • 使用 console.error 记录错误
  • 在处理前验证输入

步骤9:安全和生产审查

安全检查:

  • 代码中没有密钥(grep -r "apiKey.*=" functions/src/
  • .env 文件在 .gitignore
  • 规则中没有 allow read, write: if true;
  • 敏感字段受到保护,防止客户端写入

生产检查:

  • npm audit 干净
  • 构建成功:npm run build
  • 测试通过:npm test
  • .firebaserc 中的项目正确
  • 为复杂查询定义了索引

验证清单

托管模式

  • [ ] 模式与 firebase.json 配置匹配
  • [ ] Firebase控制台中存在站点/目标
  • [ ] 重写引用有效的函数
  • [ ] 模拟器端口已配置

身份验证模式

  • [ ] 身份验证方法与安全模型匹配
  • [ ] 中间件/检查正确实施
  • [ ] 环境变量已记录
  • [ ] 模拟器连接已配置

安全模型

  • [ ] 仅服务器写入:所有 allow write: if false;
  • [ ] 客户端写入:diff().affectedKeys() 验证
  • [ ] 存在默认拒绝规则
  • [ ] 一致使用辅助函数

常见问题

问题 修复方法
缺少 singleProjectMode 添加到模拟器配置
无默认拒绝规则 添加 match /{document=**} { allow: if false; }
混合架构 迁移到一致的模式
缺少 ABOUTME 在所有 .ts 文件中添加2行标题
无集成测试 为工作流添加模拟器测试
响应格式不一致 标准化为 {success, message, data?}
无错误处理 向所有处理程序添加 try-catch
代码中的密钥 移动到环境变量

与超能力的集成

对于超出Firebase模式的通用代码质量审查,请调用 superpowers:requesting-code-review

输出

验证后,提供:

  • 发现摘要
  • 按严重性分类的问题(关键、重要、锦上添花)
  • 修复建议
  • 最佳实践合规性确认

模式参考

  • 托管: docs/examples/multi-hosting-setup.md
  • 身份验证: docs/examples/api-key-authentication.md
  • 函数: docs/examples/express-function-architecture.md
  • 规则: docs/examples/firestore-rules-patterns.md
  • 模拟器: docs/examples/emulator-workflow.md