Firebase SignInWithEmailLink 会话注入

如何解决Firebase SignInWithEmailLink 会话注入

我正在为我的应用程序用户设置一个“SignInWithEmailLink”流程,以便他们在自动登录的同时验证新帐户的电子邮件。然而,在设置它时,我注意到我认为是一个安全漏洞/疏忽/矛盾,并希望得到建议。

在“SignInWithEmailLink”流程的以下文档中,它指出:

为了防止使用登录链接作为意外登录 用户或在非预期设备上,Firebase 身份验证需要用户的 完成登录流程时要提供的电子邮件地址。为了 要成功登录,此电子邮件地址必须与要登录的地址相匹配 登录链接最初是发送的。 [...] 不要通过用户重定向 URL 参数中的电子邮件并重新使用它,因为这可能会启用 会话注入

https://firebase.google.com/docs/auth/web/email-link-auth#security_concerns

我可能在这里遗漏了一些东西,但我的理解是,我们不希望恶意用户能够仅通过 URL 来破坏 anthers 帐户。假设我在这里是正确的,那么我想提请注意“actionHandler”文档,特别是关于“ResetPassword”流程。

下图是文档的注释摘录,可在此处找到 - https://firebase.google.com/docs/auth/custom-email-handler

Reset password suggested flow

查看建议的流程,如 1、2 和 3 所示的步骤表明,如果一个有效的密码重置链接,恶意用户将同时获得用于该帐户的电子邮件地址,以及允许将密码设置为任何已知值。这将允许恶意用户通过标准电子邮件密码登录流程访问帐户。


这两个流程之间的最后一个重要区别是可用的两种不同的链接验证功能

isSignInWithEmailLink ( emailLink :  string ) : boolean

检查传入链接是否是带有电子邮件链接登录

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#issigninwithemaillink

verifyPasswordResetCode ( code :  string ) : Promise < string >

如果有效,则返回用户的电子邮件地址。

https://firebase.google.com/docs/reference/js/firebase.auth.Auth#verifypasswordresetcode


鉴于所有这些信息,我的问题是这并不矛盾,这两个不同的流程之间有什么区别,例如使密码重置安全,在 signInWithEmailLink 上的具体说明不包括电子邮件以防止漏洞?或者这可能是文档中的疏忽或错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?