【问题标题】:Firestore security rules without auth没有身份验证的 Firestore 安全规则
【发布时间】:2021-07-23 11:14:20
【问题描述】:

我使用 Firestore 和 firebase 存储存储了我的投资组合应用数据。 我的应用程序中没有用户输入或注册,这是一个简单的作品集来展示我的作品。 我希望任何用户都能够读取来自我的 firestore 和 firebase 存储的数据。

我目前的规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if true;
    }
  }
}

我对这个规则的问题是攻击者可以用请求来流动我的应用程序。 我什至收到警告邮件说 “由于您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以读取您的所有数据,并且他们可以提高您的费用。”

我没有存储任何敏感数据,但我想防止谷歌收取额外费用。 如何设置我的 Firestore 安全规则以使任何用户无需身份验证即可阅读但防止攻击?

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-storage firebase-security


    【解决方案1】:

    Firebase 安全规则不喜欢数据库点保持打开状态,而这通常通过安全规则和身份验证来完成,您可以根据文档内部的值定义文档的可读性。

    在本例中,文档的布尔值为 Public

    service cloud.firestore {
      match /databases/{database}/documents {
        // Allow the user to read data if the document has the 'visibility'
        // field set to 'public'
        match /{document=**} {
          allow read: if resource.data.public == true;
        }
      }
    }
    

    【讨论】:

    • 感谢您的回答。假设我在我的规则中写下你的建议,我应该在我的反应应用程序中添加什么(以及在哪里)?它只是使安全警告消失还是实际上有助于防止攻击者获得许多请求,如果是,如何?
    • 你不需要在你的 react 应用中添加任何额外的要求,这是为了防止你的项目数据库被 Firebase 锁定。这应该使所有未来的警告停止。目前也没有办法编写,只能防止对您的数据库的任何直接滥用。您只需要为自己和其他客户添加关于何时以及如何写入的逻辑条件,这是一个独立于读取的字段
    • 我应用了您建议的规则并添加到一些文档中“公共”布尔字段设置为“真”。但根本没有数据显示,好像安全规则设置为假一样。我收到此错误消息:快照侦听器中的未捕获错误:FirebaseError:缺少权限或权限不足。
    • 仔细检查您的字符串大小写是否相等。也知道如果您正在查询,这可能会被拒绝,因为 public 也可能是错误的。我提供的代码来自 Firebase 文档
    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 2021-04-08
    • 2018-04-04
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多