Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 使用规则保护Firestore数据库。检查身份验证。够了吗?_Firebase_Google Cloud Firestore_Firebase Authentication_Firebase Security - Fatal编程技术网

Firebase 使用规则保护Firestore数据库。检查身份验证。够了吗?

Firebase 使用规则保护Firestore数据库。检查身份验证。够了吗?,firebase,google-cloud-firestore,firebase-authentication,firebase-security,Firebase,Google Cloud Firestore,Firebase Authentication,Firebase Security,我是Firebase的新手,试图理解数据库规则。我在用Firestore 我有一个数据库,基本上需要所有用户读取,也需要编写。所有用户都可以看到数据库中的文档,并通过某些操作更改某些字段。在某些情况下,他们会删除某些过期的旧文件 现在,我明白了,我不能让读和写对所有人开放,因为这是不安全的。所以我使用身份验证,我将匿名验证用户,这样只有经过身份验证的用户才能访问 我知道这就是工作: service cloud.firestore { match /databases/{database}/d

我是Firebase的新手,试图理解数据库规则。我在用Firestore

我有一个数据库,基本上需要所有用户读取,也需要编写。所有用户都可以看到数据库中的文档,并通过某些操作更改某些字段。在某些情况下,他们会删除某些过期的旧文件

现在,我明白了,我不能让读和写对所有人开放,因为这是不安全的。所以我使用身份验证,我将匿名验证用户,这样只有经过身份验证的用户才能访问

我知道这就是工作:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}
现在,我的问题是,这足够了吗?我不是黑客,所以我不知道黑客会或可能会如何破解和删除/更改我数据库中的内容,但这是否意味着只能通过应用程序对数据库进行更改?如果有人不使用该应用程序,并以其他非法方式进行身份验证,是否仍会有人入侵

非常感谢你的帮助,我试着通过阅读来弄清这件事的真相,但是没有成功

这是否意味着只能通过以下方式对数据库进行更改 使用应用程序

任何人都可以使用JavaScript SDK编写一个简单的HTML页面,并尝试与Firestore后端交互。请注意,获取Firebase配置元素并不困难,有关更多详细信息,请参阅底部

这就是为什么如果您想保护您的数据,那么实现一组安全规则是最重要的

现在,重要的是要注意有关Firebase身份验证和“注册”用户的以下几点:

您应该注意,任何人都可以“通过调用该方法或首次使用联合身份提供程序(如或)登录用户,在Firebase项目中创建新用户”(当然,如果这些身份提供程序已激活)。请参阅

因此,同样,通过Firebase配置元素,可以轻松构建一个HTML页面,调用
createUserWithEmailAndPassword()
方法

这意味着,如果您想仅通过在Firestore安全规则中使用
允许读取、写入:if request.auth.uid!=null
来限制某些特定用户对应用程序的访问,这是不够的

一种可能的方法是使用。例如,您可以为所有授权用户设置一个特定声明(例如authorized=true),并调整您的安全规则以检查用户令牌中是否存在此声明


注意:如何查找web应用程序的Firebase配置元素?


查找Firebase配置对象并不困难。只需查看构成应用程序的所有HTML或JS文件中的
apiKey
字符串。

Firebase安全规则不能限制对单个应用程序的访问。所有API都可供任何具有internet连接的人公开使用。它们都是记录如下:

Firebase身份验证的目的是确保个人用户的个人访问权限得到适当的控制。一旦您允许用户使用匿名或电子邮件身份验证创建帐户,他们就可以使用这些规则完全访问数据库中的所有文档。因此,您现在拥有的并不是真正的“安全”根据这个词的大多数定义,你将不得不决定这对于你的目的来说是否足够“安全”


您还可能收到Firebase的电子邮件,说您的规则不安全。使用
/{document=**}
像这样,匹配所有文档,这可能不是您想要的。至少,您应该调用希望用户访问的单个集合,而不是使用此全局通配符。

谢谢,如果我理解正确。我可以使用“自定义声明”吗,即当用户“注册”时通过该应用程序,我创建了一个虚拟字段,如“UserisAuthential=true”。然后我在firestore规则中创建了一个只有字段为“UserisAuthential=true”的用户才能读取写入数据库。这会停止吗?任何从简单html页面创建UserWithEmailandPassword的人?“任何从简单html页面
createUserWithEmailAndPassword
的人都会停止此操作吗?”>不,它不会阻止恶意用户使用
createUserWithEmailAndPassword()
方法创建用户,但这些用户不会拥有在您的安全规则中使用的自定义声明,因此他们将无法访问您的数据。您可能会感兴趣,请阅读以下内容,其中解释了如何构建一个模块,允许具有特定管理员角色的最终用户创建其他用户并将其分配给其他用户er特定的用户角色。这并不完全是您想要的,但其中使用的大多数概念都以某种方式适用于您的案例。(免责声明,我是作者)太好了,这正是我需要的。我可以使用“自定义声明”吗“还有匿名登录吗?甚至没有人可以将JavaScript注入网页。Firebase Auth使用的所有API端点基本上都可以直接供公众使用。它们不需要由提供的SDK调用。它们甚至在这里有文档记录: