3

我想提高我的应用程序的安全性,我正在研究 Firebase App Check 服务,它可以确保向服务器发出的所有请求都来自我的应用程序。仅在 Firebase 实时数据库中,我设置了以下规则:

"Users": {
      "$userId": {
        ".read": "auth != null && $userId === auth.uid",
          ".write": "auth != null && $userId === auth.uid", 
      }

我认为这可以确保请求来自登录到应用程序的用户。

那么 App Check 更多的是做什么,该服务是否也阻止了越狱或特别 root 的设备?因为它在网站上说:请求来自真实的、未篡改的设备。但引言中没有明确提及篡改的含义,即使我宁愿确定这看起来合乎逻辑。

那么 AppCheck 是如何确保发送到数据库的数据不被破坏的呢?

例如,如果启用数据持久性并且用户关闭应用程序、更改本地存储的查询并重新启动应用程序。然后在我看来,损坏的请求将由 AppCheck 发送和验证,但它会被修改。如果没有,您能否详细说明该过程,因为我有点困惑。

4

3 回答 3

5

如果您只有显示的安全规则,并且不使用 App Check,那么任何人都可以从您的应用中获取配置数据,并使用该数据进行 API 调用。因此他们可以调用 API 来创建用户帐户,并以您可能没有想到的方式调用数据库。

如果您的安全规则捕获了您对数据的所有要求,那么 App Check 确实不会改变恶意用户可以做什么,它只是阻止滥用者的额外层。

但在许多情况下,您的应用程序代码执行的操作与您的安全规则强制执行的操作之间存在(有时是细微的)差异。在这样的情况下,滥用的用户可能会运行他们自己的代码并做一些与你的代码不同的事情。

例如,您的安全规则不会强制规定可以写入哪些数据。因此,滥用用户可以:

  • 不要在用户配置文件中写入您的代码期望的数据。
  • 在用户配置文件中写入您的代码不期望的完全不同的数据。
  • 将更多数据写入配置文件,然后为您的项目收费。

虽然您可以(并且应该)将所有此类关于数据格式和数据大小的要求编码到您的安全规则中,但启用 App Check 是一种已经阻止许多恶意用户的快速方法。

在使用应用程序检查和安全规则之间,您既可以得到广泛的保护,又可以细粒度地控制谁可以访问数据以及他们可以对数据执行什么操作。

于 2021-06-12T15:24:23.910 回答
3

除了puf的回答之外,还请查看 WWDC 演讲使用 App Attest 和 DeviceCheck 减轻欺诈。Firebase App Check 为 App Attest 提供服务器。

于 2021-06-17T16:05:14.673 回答
0

转到 Apple 证书、标识符和配置文件:选择您的密钥上传 firebase 并进行检查:访问 DeviceCheck 和 AppAttest API 以获取您关联的数据,在 此处输入图像描述

于 2022-01-04T12:46:59.670 回答