FireBase实时数据库-不安全规则 [英] Firebase Realtime database - insecure rules
本文介绍了FireBase实时数据库-不安全规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Firebase
收到一条消息,告诉我我的项目Realtime database
有不安全的规则。但当我检查它时,我并不是很清楚什么是不安全的。
显示如下:
{
"rules": {
".read": true,
".write": "(auth != null) && (auth.uid == '123...myUID ...xyz')",
"CollectionOne": {
".indexOn": ["name", "url"]
},
"CollectionTwo": {
".indexOn": ["name"]
}
}
}
我保留了读访问权的原样,因为这是在支持一个网站。因此,访问该网站的任何人都应该能够阅读这些数据。
对于写访问,据我所知,我是唯一可以写的人。
请注意,我还有第三个集合(CollectionThree),这在规则中没有提到。这可能是原因吗?
此外,我还可以想象只将读访问权限授予Web服务器,以便将内容提供给访问者,而不是直接提供给任何人,但我认为情况并非如此。如果是这种情况,我将不知道如何设置此规则。如果有人能对此有所了解,那将是很有帮助的。
推荐答案
虽然这是一个合理的要求,但现在,即使不访问您的网站的人也可以通过一个调用读取整个数据库。事实上,只需打开URL访问该站点的任何人都应该能够阅读数据。
https://<yourproject>.firebaseio.com/.json
(或您所在地区的类似URL)即可从我们的数据库中抓取所有数据。
通常,您的代码将以更细粒度的级别访问数据。事实上,从您的规则来看,我希望您的代码运行查询或访问CollectionOne
和CollectionTwo
的单个子节点。如果这是您的应用程序代码执行的操作,安全规则应允许的所有操作。
所以更好的做法是:
{
"rules": {
".write": "(auth != null) && (auth.uid == '123...myUID ...xyz')",
"CollectionOne": {
".read": true,
".indexOn": ["name", "url"]
},
"CollectionTwo": {
".read": true,
".indexOn": ["name"]
}
}
}
现在,我上面显示的URL模式不再起作用,恶意用户必须知道您的顶级节点的名称才能访问其中的数据。
有关这方面的更多信息,请参阅:
- What security rules should be applied to reads in Firebase?
- Firebase email saying my realtime database has insecure rules
这篇关于FireBase实时数据库-不安全规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文