Firebase 规则以及如何测试它们

Firebase rules and how to test them

我正在努力构建 Firebase 后端。一开始它非常简单,但随着规则的发展,发现安全漏洞变得越来越困难。实际测试规则的选项有哪些?我查看了 Targaryen,它是一个第 3 方库,但无法启动并在 OSX 上 运行。是否有更通用的方法来测试规则?进行 Firebase 安全测试的最常用方法是什么?

如果您还没有看到它,在您应用的 Firebase 控制面板中,左侧有许多选项;数据、安全和规则、模拟器;模拟器就是你想要的。

在那里,您可以验证为用户,然后在不同的子节点上测试读写能力。

我们制作了自己的小应用程序以 read/write 到不同的节点:随着我们的应用程序的增长,规则的复杂性也随之增加,这使得通过应用程序测试 20 个节点然后测试一个节点变得更加容易一次在模拟器中。我们的测试应用程序大约有 100 行代码。

我刚刚设置了 Bolt,它看起来比通过 Firebase 使用标准规则和模拟器要好得多 UI。

您确实需要实际使用 Bolt 语法,但我发现它无论如何都比标准规则容易得多,尤其是当它们变得越来越大和复杂时,因为 Bolt 允许您为 re-use 通用代码创建函数对于 read/write/validate 逻辑。测试对我来说只是一个奖励。

注意几点:

  • 说明说要全局安装 firebase-bolt 但节点可以找到它,除非它是本地安装的,或者你 link 全局安装。
  • 参见 this answer 获取摩卡咖啡 运行ning。如果您在 package.json 文件的 scripts 部分将 --ui tdd 添加到 "test": "mocha --ui tdd" 并将测试保留在 test/test.js 中,那么您只需要 运行 npm test到运行你所有的测试。
  • 要制定规则,您可以使用 Targaryen
  • 要针对实时数据库测试您的规则,您可以使用 REST api 使用调试标志设置为 true 的令牌(用于创建这些令牌的数据库机密已被弃用,但我不认为您使用新的 Firebase Admin SDK 创建此类令牌);响应 header 将包含有关规则评估的调试信息。
  • 要调试您的规则和生产数据,请使用 firebase 控制台中的模拟器(请注意,它不允许模拟更新操作 AFAIK)