我最近收到一封来自Firebase的电子邮件,告诉我我的实时数据库有不安全的规则。这些是我设置的规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
这不是一条安全规则吗?
电子邮件/密码是我启用的唯一登录方法。
您还可以通过访问电子邮件底部的链接来禁用警报。
https://console.firebase.google.com/subscriptions/project/
这里是firebaser
很抱歉,如果邮件没有明确说明这些规则的不安全之处。确保用户数据的安全对于任何可用的应用程序来说都是至关重要的一步,因此我将在下面详细解释这一点。
您拥有的(默认)规则允许任何登录到后端的人对整个数据库进行完全读/写访问。这只是一个非常基本的安全层。
一方面,这比只允许每个人访问您的数据库更安全,至少他们必须登录。
另一方面,如果您在Firebase身份验证中启用任何身份验证提供商,任何人都可以登录到您的后端,即使不使用您的应用程序。根据提供商的不同,这可以像在浏览器的开发人员控制台中运行一点JavaScript一样简单。一旦他们登录,他们就可以读取和写入数据库中的任何内容。这意味着他们可以用firebase这样的简单命令删除所有数据。数据库()。ref()。删除()
。
为了使数据访问更加安全,您需要更严格地控制每个登录用户可以做什么。例如,假设您在/user
下保存了一个包含每个用户信息的配置文件。您可能希望允许所有用户访问这些配置文件,但您肯定希望用户只被允许修改自己的数据。您可以使用以下规则来保护这一点:
{
"rules": {
"users": {
".read": true,
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
}
}
}
有了这些规则,每个人(即使是未经身份验证的用户)都可以读取所有配置文件。但每个配置文件只能由其配置文件所在的用户修改。有关这方面的更多信息,请参阅Firebase有关保护用户数据的文档。
除了确保对数据的所有访问都经过授权之外,您还需要确保存储的所有数据对您的应用程序的任何规则都是有效的。例如,假设您想为用户存储两个属性:他们的姓名和年龄(为了便于示例,实际上您可能会存储他们的出生日期)。因此,您可以将其存储为以下内容:
"users": {
"uidOfPuf": {
"name": "Frank van Puffelen",
"age": 48
}
}
要确保只能写入此数据,可以使用以下规则:
{
"rules": {
"users": {
".read": true,
"$user_id": {
".write": "$user_id === auth.uid",
".validate": "data.hasChildren('name', 'age')",
"name": {
".validate": "data.isString()",
},
"age: {
".validate": "data.isNumber()",
},
"$other: {
".validate": false
}
}
}
}
}
这些规则确保每个用户配置文件都有一个分别带有字符串和数值的名称
和年龄
属性。如果有人试图写入任何其他属性,写入操作将被拒绝。
以上是关于如何保护(用户)数据的快速入门。我建议您查看Firebase安全文档(以及嵌入式视频)了解更多信息。
更新:自2021年5月起,您还可以使用Firebase应用检查来限制对来自您网站或应用的呼叫的访问。这是减少数据库滥用的另一种快速方法。不过,这种方法并不万无一失,因此您需要将应用检查与细粒度控制的安全规则结合起来,以获得广泛保护。
我想借用几年前提出的一个问题,因为我有相同的规则Firebase电子邮件说我的实时数据库有不安全的规则 除电子邮件/密码外,所有登录方法都被禁用 我只有一个电子邮件/密码帐户 我不允许任何人登录-没有GUI登录 我的Firebase还能做什么呢?谢谢
我需要一些帮助来保护我的数据库。 我的数据库如下所示(我使用的是电话号码,而不是uid): 如您所见,在用户节点下有经过身份验证的用户的电话号码。我的目标是保护数据库,这样用户就可以读写自己的数据。 我尝试了以下代码,以允许每个用户读取和写入自己的数据: 但每当我在规则游乐场或我的应用程序上尝试这一点时,我都会被拒绝: 你们能帮我解决吗?
我需要一些帮助来保护我的数据库。 以下是我的安全规则: 我尝试了以下代码,以允许每个用户读取和写入自己的数据: 我的数据库如下所示(我使用的是电话号码,而不是uid): 但是由于某种原因,当我运行Firebase规则游乐场时,给定的auth.token.phone数等于我给出的确切位置,例如,我被拒绝读取选项。 这也发生在我的应用程序中,你们能帮我解决吗?
我在中收到一条消息,告诉我我的项目有不安全的规则。但当我检查它时,我不太明白什么是不安全的。 它显示如下: 我保留了读取访问权限,因为它支持一个网站。所以任何访问该网站的人都应该能够读取数据。 至于写权限,据我所知,我是唯一能写的人。 请注意,我还有第三个系列(CollectionThree),规则中没有提到。这可能是原因吗? 除此之外,我还可以想象,只有web服务器可以获得读取权限,以便将内容提
我有一个使用Firebase实时数据库的网站。它通常会向我发送关于不安全规则警告的电子邮件。我在这里和Firebase Documantation搜索过这个,但当我写其他规则时,它给了我这样的错误: 错误保存规则-第10行:字符串不能包含 ".", "#", "$", "/", "[", 或"]" 我现在使用这个规则: 这里有一张图片,我尝试了另一种叫做混合公共和私人访问的规则。 如果有人能帮助我
我创建了一个应用程序,它使用Firebase实时数据库。我对安全规则有一个很大的问题。我的用户不需要登录使用应用程序,他们可以发送数据到数据库,无需任何身份验证。例如:这是一个简单的游戏,他们可以互相玩,然后他们可以保存分数。我想创建一个安全的数据库,但是任何人都可以写