【问题标题】:Security riddle: confirming email and resetting passwords安全谜题:确认电子邮件和重置密码
【发布时间】:2013-07-31 17:40:41
【问题描述】:

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

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

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

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

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

两种可能的解决方案:

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

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

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

谢谢!

【问题讨论】:

  • 嘿。对此有任何跟进吗?我正在查看我过去的答案,发现这仍然没有被接受的答案。您最终做出了决定,还是仍在设计中?

标签: ruby-on-rails-3 security devise passwords devise-confirmable


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复!我可能会误解,但您的提议似乎仍然允许恶意用户劫持帐户:用户 A 输入了错误的电子邮件地址并继续使用该网站,并输入了一些个人信息。后来,其电子邮件 A 意外输入的恶意用户 B 收到了一封“确认您的帐户”电子邮件,他点击了该电子邮件。根据您的建议,系统确认帐户但不登录 B。然后用户 B 使用“忘记密码?”功能,它将重置密码链接发送到他的电子邮件地址。他重设密码,进入A的账户!
  • @oregontrail256 我明白你的意思,如果这确实是你的用户群关心的问题,你应该考虑到这一点。要么让他们预先确认,要么在重置密码之前回答安全问题。我的论点是,期望用户输入他们的实际电子邮件地址并不是不合理的。但是在激活帐户之前进行安全问题和确认是我所看到的防止这种情况的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2016-03-20
  • 1970-01-01
  • 2012-07-20
  • 2013-07-11
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多