【问题标题】:GOOGLE FIRESTORE: Are these security rules safe?GOOGLE FIRESTORE:这些安全规则安全吗?
【发布时间】:2021-02-20 17:03:26
【问题描述】:

因此,我现在正在查看 Firestore 的安全规则文档,以确保用户放入我的应用程序中的数据是正常的。截至目前,我需要用户能够做的就是读取数据(实际上只有“获取”,但“读取”也可以),并创建数据。所以,我现在对 Firestore 数据的安全规则是:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /jumpSpotAnnotations/{id} {
      // 'get' instead of 'read' would work too
      allow read, create;
    }
  }
}

我有完全相同的“允许读取,创建;”对于我的存储数据也是如此。释放后会好起来还是很危险?在文档中,他们写道:

“在您设置 Cloud Firestore 时,您可能已经设置了规则以在开发期间允许开放访问。您可能认为您是唯一使用您的应用的人,但如果您已经部署了它,它就可以在互联网上使用. 如果您没有对用户进行身份验证和配置安全规则,那么任何猜测您的项目 ID 的人都可以窃取、修改或删除数据。”

此文本前面有一个示例,其中规则是“允许读取,写入;”,而不是我的“允许读取,创建”。我的规则是否也适用于数据的删除/修改?我之所以使用 create 是因为我假设这只允许人们创建数据,而不能删除或修改它。

这个问题的最后一部分,但用户如何猜测我的项目 ID?他们是否不必登录我的谷歌帐户就可以手动删除、修改或窃取数据?我不确定它是如何工作的。我的应用程序界面只允许用户创建数据或读取数据,仅此而已。那么,一些随机的人还能以某种方式在线进入这个数据库并搞乱它吗?

感谢您的帮助。

【问题讨论】:

    标签: ios database firebase google-cloud-firestore firebase-security


    【解决方案1】:

    您的规则允许任何有互联网连接的人阅读和创建 jumpSpotAnnotations 集合中的文档。我们不知道这对您的应用程序是否“安全”。您必须自己确定这种情况是否安全。如果您对某人匿名加载该集合的文档感到满意,并且您可以为这种行为付费,那么它是安全的。

    在您发布应用之前,您的项目 ID 已融入您的应用。所有人所要做的就是下载并反编译您的应用程序以找到它。这并不难。您的项目 ID 不是私人信息。

    【讨论】:

    • 是的,我知道你所说的一切,所以一些失败者可能会用不恰当的文字或图片等来加载我的数据库,对吧?但是他们不能删除或修改现有数据,对吧?
    • 就是这个样子。这是您可以自己轻松测试的东西,尤其是使用本地模拟器来获取安全规则。 firebase.google.com/docs/firestore/security/test-rules-emulator
    • 我通过谷歌浏览了一个关于使用模拟器的很好的教程,我确实学到了一些东西,但他们一直强调不要使用,'允许读取,创建;'基本上是我在生产中所拥有的。知道为什么吗?您是否认为我可以制定任何简单的安全规则来足以发布不涉及身份验证的版本?编辑:我认识到您不知道我的应用程序的上下文,因此不能适当地为我推荐确切的安全规则。我只是问你是否认为不使用身份验证是可能的
    • 那是因为谷歌似乎在他们的例子中强调使用身份验证。到目前为止,就应用程序的目的而言,我真的不需要它,似乎我现在只是为了安抚谷歌而添加它
    • 这取决于你。
    【解决方案2】:

    不,您的规则并不安全,要了解有人如何猜测您的项目 ID 并窃取数据,您首先必须了解 Firebase 提供了一个简单的 REST API 来访问存储的数据。所有数据都以 JSON 格式存储,因此可以通过向附加“.json”的数据库 URL 发出请求来访问公共数据库。

    现在的主要问题是人们如何猜测您的项目 ID,请参阅有许多可用的工具,您可以通过这些工具在网络上设置代理并分析通过的每个请求。正如 Google 已经说过的那样,firebase 只是使用 rest API,因此可以通过拦截 HTTP 请求轻松了解 API 端点,然后如果您的规则不安全,那么您的数据可能会受到损害。

    现在的解决方案,如何保护您的数据。看到有很多方法,甚至 firebase 也提供了大量的方法来保护数据,只需阅读他们关于数据库安全的文档即可。但是你可以从你身边做一些事情,这样如果你的数据被泄露,那么也有人实际上无法读取它。 您可以阻止应用程序以纯文本形式读取数据。使用公钥算法加密数据。将私钥保存在必须读取数据的系统上。然后应用程序无法读取纯文本数据。这也不会阻止数据的操作或删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 2019-07-05
      • 2020-06-19
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多