Laravel具有两个内置的功能,分别称为Forgot/Reset Password和Email Verification。
我们都知道,对于应用程序而言,两者都是非常关键且敏感的操作,因此必须通过Laravel框架本身来保证它们的安全性。
但是,我感到困惑的是,为什么在电子邮件验证uses a database table功能中忘记/重置密码uses signed routes来保留令牌。
注意:签名的路径/ URL是Laravel本身提供的功能。 See docs。
这里是否存在安全性或性能方面的问题?那我们什么时候应该用哪个呢?
答案 0 :(得分:1)
好点,但是它们的用法又有很大的不同。
要进行电子邮件验证,您已经登录,只需单击电子邮件中的链接,该链接将在您执行以下操作时将时间存储在users
表email_verified_at
列中。行动。并用于验证电子邮件的所有者是否确实已在您的网站上注册或该电子邮件是否有效,而不是伪造的电子邮件,以便有人利用您的网站。
“忘记密码”选项意味着您不记得密码(并且您已注销),并且当您输入电子邮件时,发送到电子邮件的链接还是经过签名的路由(令牌为(电子邮件验证确实如此),但是该链接还包含电子邮件地址,因此令牌和电子邮件都必须与password_resets
表中的一行匹配,以便允许用户更改密码。
说了这么多,我相信这是非常安全的,两者都没有问题。所以这是我关于问题的2美分,希望对您有所帮助。 :)
答案 1 :(得分:0)
该主题已经在laravel / framework存储库中的“拉取请求”之一中进行了讨论。您可以在这里访问它: [5.7] Database-less Password Reset #23706
总而言之,主要关注的是这些:
- 可以重播URL以再次重置令牌。
- 前员工可以立即为系统中的任何帐户生成密码重置链接(有效的链接),直到加密密钥被删除为止。 旋转。如果要存储,旋转这些键可能有点像PITA 其他加密数据。在大型,引人注目的应用程序中 成为痛苦和单点故障的巨大根源。
- 本质上,链接可以永远被“猜测”;但是,我不确定将key:generate生成的密钥强行强制使用是可行的。