1

我在我的 Rails 3.0 应用程序上使用 Devise,我们目前已启用可确认和可恢复。这些模块要求用户确认他们的电子邮件帐户(可确认),并允许用户通过将电子邮件发送到他们的电子邮件帐户(可恢复)来重置他们的密码。

不幸的是,我们很难“设计”(双关语)允许用户在不确认其帐户的情况下使用该网站的合理安全策略。我们强制执行以下安全要求:

  1. 确认您的帐户需要登录或登录。如果不是这种情况并且用户 A 不小心输入了恶意用户 B 的错误电子邮件地址,B 将收到确认电子邮件链接,自动登录,然后可以从那里重置密码通过“电子邮件重置密码链接”。要求 B 使用 A 的凭据登录可以消除这种可能性。

  2. 通过电子邮件重置密码需要确认电子邮件。这是因为如果用户 A 不小心输入了错误的电子邮件地址,一个属于恶意用户 B 的电子邮件地址,那么 B 将收到确认电子邮件链接并且知道 A 已经注册了一个帐户。因此 B 可以访问该站点并使用重置密码功能来更改帐户的密码,然后可以确认他的帐户。要求确认的电子邮件地址消除了这种可能性。

所以一切都很好。除非用户 A 创建了一个帐户,但尚未确认他的帐户,然后返回该站点并忘记了他的密码。这里 A 陷入了一个循环依赖循环,重置他的密码需要确认他的帐户,但确认他的帐户需要使用他忘记的密码登录。

两种可能的解决方案:

  1. 要求用户在登录后立即确认他们的帐户。这会产生更多的注册摩擦,但消除了循环依赖。

  2. 允许用户在没有确认帐户的情况下重置密码,但不允许用户在确认帐户之前输入任何敏感信息或执行关键操作。这样恶意用户 B 仍然可以劫持帐户,但他将在没有任何有价值的信息或权力的情况下获得对帐户的控制权。

有更好的解决方案吗?企业如何处理这个问题?我已经使用了几个不需要立即电子邮件确认的网站,所以如果我们能以一种不需要实现像 #2 那样复杂的东西的方式来做到这一点,那就太好了。

谢谢!

4

1 回答 1

0

创建一种用户经过身份验证但未确认的角色。要求用户在进行任何帐户更改(例如重置其密码或电子邮件地址)之前确认其帐户并不是没有道理的。

我认为这里的诀窍实际上就是您可以让用户在不登录的情况下确认帐户。如果用户 A 输入了错误的电子邮件地址,那么您能做什么呢?尽最大努力帮助他们在开始时输入正确的电子邮件地址。这对用户来说是一个相当不可原谅的罪过——他们应该知道如何输入他们的电子邮件地址。如果他们无法收到电子邮件,并且使用了错误的帐户,最后的手段是您提供一些技术支持和/或给他们一些安全问题以帮助他们恢复帐户。

单击电子邮件中的“确认”链接后,应要求他们登录。就这么简单。“感谢您确认您的帐户,请登录”。不要让他们自动登录,因为这可能是一个安全问题,特别是如果他们有一个包含敏感信息的“个人资料”。

在您的情况下,未经确认的用户忘记了密码。告诉他们必须先确认他们的帐户,然后重新发送电子邮件。之后,让他们选择通过电子邮件重置密码。它很笨重,但如果你解释为什么他们必须经历这个,用户可能会理解。他们是忘记所有信息的人,所以他们不应该对你太苛刻。

于 2013-07-31T18:51:39.790 回答