Firebase:当用户可以使用虚假地址时通过电子邮件地址保护记录

Firebase: Securing records by email address when users can use fake addresses

我正在制作一个网络应用程序,您先付费使用它,然后再登录。注册工作流程是这样的:

这一切似乎都很好,除了:

  1. 我无法控制的恶意用户 Bob 为不属于他的电子邮件 "x@example.com" 创建了一个用户,并使用 Firebase 客户端 SDK 登录。

  2. 然后爱丽丝为她的电子邮件"x@example.com"付款。

  3. Bob 仍将处于登录状态,现在可以使用 Alice 付费购买的功能。

如何防止这种情况发生?

我的一个想法是,上面的 Firebase 函数可以检查用户 "x@example.com" 是否存在未验证的电子邮件地址,如果存在,它将 1) 删除该用户和 2) 再次为该电子邮件地址创建一个用户(创建一个新的唯一用户 ID)。 Bob 将拥有与电子邮件地址关联的用户 ID 不同的用户 ID,因此无法访问付款记录。然而,如果爱丽丝在第一次付款后没有验证她的电子邮件就进行了两次付款,这就会中断。解决这个问题的可靠方法是什么?

考虑在处理交易之前验证电子邮件。 一种选择是使用 sign in with email link。这将使用户登录并验证他们的电子邮件。如果需要,您也可以在之后设置密码。如果现有的未经验证的提供商链接到该帐户,它将被取消链接,并且恶意用户之前设置的任何现有会话都将被撤销。