我有以下Firebase实时数据库规则:
{
"rules": {
".read" : "auth != null",
".write": false,
"Games": {
".indexOn" : "WeekId"
},
"Version": {
".read" : true
}
...
}
我一直从Google收到以下电子邮件:
[Firebase]您的实时数据库'xxx-9e542'具有不安全的规则`
我们检测到您的安全规则存在以下问题: 任何登录的用户都可以读取您的整个数据库 没有强大的安全规则,拥有数据库地址的任何人都可以对其进行读写操作,从而使您的数据容易受到攻击者窃取,修改或删除数据以及创建昂贵的操作的攻击。</ p>
因此,根据我上面的规则,我知道,我有一些规则可以允许已登录的用户读取Games
节点,并且所有用户甚至可以通过未认证的用户读取Version
节点
据我所知,必须采用这种方式,因为我要求所有已登录用户都可以访问Games
节点信息,否则他们将如何查看他们可以玩的游戏列表选择!!
对于Version
节点,在实例中,我需要所有下载我的应用程序的人来“强制升级”我的应用程序,以进行必要的更改。在这种情况下,我需要下载了较旧版本应用程序且“已登录”或“未登录”的用户,并迫使他们更新应用程序,否则他们将无法使用它。
任何人都可以让我知道我是如何设计安全规则的,还是这是“正常的”,并且我收到的电子邮件就像FYI一样??
其他人如何设置他们的规则!?或设置安全规则的“最佳实践”是什么?尤其是如果您需要登录用户来访问24/7的任何特定节点的信息!?
答案 0 :(得分:1)
当前规则的主要问题是,即使他们对您的应用程序一无所知,任何人都可以通过API登录并读取您的整个数据库。他们可以只读取数据库的根目录,然后开始查看您的数据。
提高安全性的第一步是不允许在最高级别上读取,而只能在较低级别上读取:
{
"rules": {
".write": false,
"Games": {
".read" : "auth != null",
".indexOn" : "WeekId"
},
"Version": {
".read" : true
}
...
}
现在没有人可以从根目录中读取内容,并且必须知道存在Games
或Version
节点才能读取它。