禁止从应用程序外部访问Firestore

时间:2020-05-04 09:26:28

标签: google-cloud-firestore firebase-authentication

我有一个(私人的,即为我自己和其他几个人的)md应用程序,它应在FlutteriOS上运行。它在后台使用Android进行数据共享,并以Firestore作为其唯一提供者的Firebase Authentication。这些是设置的详细信息:

  1. 访问规则仅允许经过身份验证的用户(即我的Firebase项目认识的任何用户)访问。
  2. 为防止其他人使用我的密钥,我将它们限制为各自的应用程序类型,即,仅给定iOS捆绑包ID的iOS密钥,仅给指定包名称的Android密钥和我的(调试)密钥SHA1。
  3. li>

问题:这是否保证知道我的项目ID和数据库URL等的人不能在没有我的应用程序的情况下简单地读写数据?源位于GitHub上,并且也提交了Google Sign InGoogleService-Info.plist。 (我进行了一些研究,发现该信息不是秘密的,因为它无论如何都可以在APK和IPA中找到。)

我的假设,如果我做错了,请纠正我的意思:

  1. 尽管可以使用邮递员访问数据库,但要使用我的安全规则,他们必须向我的Firebase项目知道的有效用户进行身份验证。
  2. 要从我的应用程序外部将用户添加到Firebase用户数据库中,必须有人使用我的项目信息并使用API​​密钥。如果他们能够做到这一点,他们可以简单地使用Google登录到自己的帐户,这将在我的项目中创建一个新用户并使用该应用程序。
  3. 在我的情况下,这意味着他们需要创建一个iOS或Android应用程序,因为密钥是“作用域”的,也就是说,只允许它们用于特定的应用程序类型(此处为iOS和Android)。他们无法在Web应用程序中使用API​​密钥。 (这是真的吗,按键中是否有任何信息可以防止Android按键被用于iOS应用,反之亦然?)
  4. 这对Android来说是不可能的,因为我限制了密钥-攻击者必须创建一个与我的包名称相同的Android应用(允许),但还必须使用我拥有的私钥对其进行签名。
  5. 我不太了解iOS。我还通过指定我的包ID来限制密钥,并且在构建设备时它必须是全局唯一的,但是老实说,我不知道模拟器是否也需要唯一的。否则,这意味着某人可以使用我的捆绑包ID创建一个应用程序,在其模拟器上运行,使用其Google帐户登录,并从现在起可以访问数据。

有人可以按照我认为的方式确认这项工作吗?并澄清#3中的关键疑问和#5中的iOS问题吗?

1 个答案:

答案 0 :(得分:1)

如果您仍然需要帮助,可以在以下网址获得Firebase的免费支持:https://firebase.google.com/support/troubleshooter/contact