首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙实时数据库-不安全规则

防火墙实时数据库-不安全规则
EN

Stack Overflow用户
提问于 2021-10-18 07:48:32
回答 2查看 238关注 0票数 1

我在Firebase中收到一条消息,让我知道我的项目Realtime database有不安全的规则。但是当我检查它时,我不太明白什么是不安全的。

它是这样出现的:

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

我离开了读取访问的方式,因为这是支持一个网站。因此,任何访问该网站的人都应该能够阅读这些数据。

至于写的权限,据我所见,我是唯一会写作的人。

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

此外,我还可以想象,为了向访问者提供内容,而不是直接向任何人提供读取访问权限,可以只访问web服务器,但我不认为是这样的。如果是这样的话,我就不知道该怎么制定这个规则了。

如果有人能弄清楚这件事,那会很有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-18 14:21:58

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

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

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

因此,更好的一步是:

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

现在我展示的URL模式将不再有效,恶意用户必须知道顶级节点的名称才能访问其中的数据。

有关此问题的更多信息,请参见:

票数 3
EN

Stack Overflow用户

发布于 2021-10-18 09:54:52

[消]火源文档建议使用更具体的规则。(因此,将您给整个db的规则提供给每个集合肯定会有所帮助)

原因之一是:

规则被应用于OR语句,而不是和语句。因此,如果多个规则匹配一个路径,并且任何匹配的条件都授予访问权限,则规则授予对该路径上的数据的访问权限。因此,如果广义规则授予对数据的访问权限,则不能使用更具体的规则进行限制。但是,通过确保规则不重叠,可以避免这个问题。作为编译器警告,防火墙安全规则标志在匹配的路径中重叠。

您可以找到关于这个主题的更多信息,这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69612460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档