FireBase实时数据库-不安全规则 [英] Firebase Realtime database - insecure rules

查看:17
本文介绍了FireBase实时数据库-不安全规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Firebase收到一条消息,告诉我我的项目Realtime database有不安全的规则。但当我检查它时,我并不是很清楚什么是不安全的。

显示如下:

{
  "rules": {
    ".read": true,
    ".write":  "(auth != null) && (auth.uid ==   '123...myUID ...xyz')",
    "CollectionOne": {
      ".indexOn": ["name", "url"]
    },
    "CollectionTwo": {
      ".indexOn": ["name"]
    }
  }
}

我保留了读访问权的原样,因为这是在支持一个网站。因此,访问该网站的任何人都应该能够阅读这些数据。

对于写访问,据我所知,我是唯一可以写的人。

请注意,我还有第三个集合(CollectionThree),这在规则中没有提到。这可能是原因吗?

此外,我还可以想象只将读访问权限授予Web服务器,以便将内容提供给访问者,而不是直接提供给任何人,但我认为情况并非如此。如果是这种情况,我将不知道如何设置此规则。

如果有人能对此有所了解,那将是很有帮助的。

推荐答案

访问该站点的任何人都应该能够阅读数据。

虽然这是一个合理的要求,但现在,即使不访问您的网站的人也可以通过一个调用读取整个数据库。事实上,只需打开URLhttps://<yourproject>.firebaseio.com/.json(或您所在地区的类似URL)即可从我们的数据库中抓取所有数据。

通常,您的代码将以更细粒度的级别访问数据。事实上,从您的规则来看,我希望您的代码运行查询或访问CollectionOneCollectionTwo的单个子节点。如果这是您的应用程序代码执行的操作,安全规则应允许的所有操作。

所以更好的做法是:

{
  "rules": {
    ".write":  "(auth != null) && (auth.uid ==   '123...myUID ...xyz')",
    "CollectionOne": {
      ".read": true,
      ".indexOn": ["name", "url"]
    },
    "CollectionTwo": {
      ".read": true,
      ".indexOn": ["name"]
    }
  }
}

现在,我上面显示的URL模式不再起作用,恶意用户必须知道您的顶级节点的名称才能访问其中的数据。

有关这方面的更多信息,请参阅:

这篇关于FireBase实时数据库-不安全规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆