用户不控制其注册的电子邮件地址时的Firebase安全性

用户不控制其注册的电子邮件地址时的Firebase安全性,firebase,firebase-authentication,google-cloud-firestore,Firebase,Firebase Authentication,Google Cloud Firestore,一个场景: 我使用以下安全规则在Firestore中存储敏感数据: A. allow read: if resource.data.email == request.auth.token.email; B. allow read: if resource.data.email == request.auth.token.email && request.auth.token.email_verified == true; 恶意用户Bob下载我的JavaScript应用程序

一个场景:

  • 我使用以下安全规则在Firestore中存储敏感数据:

    A. allow read: if resource.data.email == request.auth.token.email;
    
    B. allow read: if resource.data.email == request.auth.token.email && request.auth.token.email_verified == true;
    
  • 恶意用户Bob下载我的JavaScript应用程序,并使用客户端调用创建一个包含电子邮件的帐户”x@example“在没有电子邮件验证的情况下,他们无法控制自己选择的密码和密码。Bob现在已登录

  • 合法用户Alice希望为自己的电子邮件地址创建帐户”x@example“,执行电子邮件验证并从Firestore读取

问题:

  • 在Bob注册后,他是否能够读取Firestore中通过安全规则A的数据

  • 在Bob注册后,他是否能够读取Firestore中通过安全规则B的数据

  • 当Alice尝试注册时,是否会因为Bob已经使用该电子邮件地址创建了帐户而阻止她注册?如果是这样的话,爱丽丝打算怎么报名

  • 一旦Alice注册(我猜你必须强迫她重新设置密码),Bob还会登录吗?如果是这样,他可以读取通过安全规则A和B的数据吗

  • 没有
  • 对。但你可以让她选择发送密码重置电子邮件。鉴于Alice有权访问邮箱,她可以使用该权限重置密码
  • Bob将保持登录状态,直到其ID令牌需要刷新,或者直到系统强制刷新为止。此时,他需要输入新密码,但他不知道

  • 你自己尝试过吗?我已经尝试过了,但我想强烈地理解我应该如何再次保护Bob欺骗Alice的电子邮件地址,而不是猜测、弄错以及我的应用程序的声誉受损。谢谢。对于4,我们如何实际阻止Bob读取Alice的数据,我当时试图用规则B保护这些数据?我可以在重置密码时强制刷新吗?听起来你是说在Alice重置密码后Bob将通过规则B,直到刷新发生,这显然是一个很大的安全漏洞,除非我更改某些内容。我缺少的部分是,你应该通过匹配auth.uid(不能伪造)而不是电子邮件地址来保护用户数据(哪些可以被欺骗)?