4

对于我们开发的许多网站,我们会验证用户的电子邮件地址。通常工作流程是这样的:

  1. 用户注册网站(激活电子邮件发送链接以激活)
  2. 用户验证电子邮件地址(通过单击上述链接)
  3. 用户必须登录网站才能使用它(假设他们尚未登录)

客户经常抱怨这个过程笨拙且有些混乱,我同意。建议的解决方案是删除第 3 步并在第 2 步之后自动登录用户。

我不确定这是否重要(因此是问题!),但我一直对像这样自动登录用户持谨慎态度。在实施建议的解决方案之前,我应该考虑哪些额外的安全风险?

这也适用于密码重置等情况,用户可能会自动登录,然后更改密码。

为了这个问题,我们假设验证电子邮件是一项硬性要求。我知道在某些情况下这是不必要的,但让我们来谈谈那些情况。

4

6 回答 6

5

这取决于您的应用程序。如果您经营一家银行网站,您永远不会这样做。如果您正在运行像 Flickr、Facebook 或其他各种社交网站这样的网站,您可能会这样做。

您可能要考虑的另一件事是仅提供有限的可访问性。我知道亚马逊在他们的部分网站上这样做了。用户可以像登录一样浏览该站点,但仅限于某个点。在他们可以做任何与采购和订单相关的事情之前,他们必须提供他们的密码。

编辑:另一个问题,我刚刚想到。确保您可以使网址无效。在您的数据库中生成您放入电子邮件的令牌,然后有办法撤销这些令牌。一种方法是在所有用户记录上放置一个计数器,然后在生成电子邮件时将该计数器值复制到令牌表中。如果您需要快速撤销大量令牌,您可以简单地增加用户记录上的计数器。然后您可以很容易地看到令牌的计数器与用户计数器不匹配,因此您可以拒绝令牌。

于 2010-08-27T17:04:54.203 回答
4

我会确保电子邮件中链接的有效性有时间限制,并使其仅对单击有效。

于 2010-08-27T17:09:16.080 回答
3

像这样的系统与用户的电子邮件一样安全。

当然,电子邮件通常在飞行和静止时都缺乏加密。电子邮件帐户通常可以从无人值守的工作站和移动设备访问。许多电子邮件永远不会被删除。

因为电子邮件泄露的机会随着时间的推移而增加,所以时间限制是个好主意。

但是,您应该假设有足够动机的攻击者可以看到传输中的电子邮件。攻击者的动机将取决于相关应用程序,因此这是否是一个好主意……取决于。

于 2010-08-27T17:23:59.313 回答
1

最低限度,

  • 严格限制链接的活动时间(1-2 天?)
  • 让它工作一次。无论第一次使用后发生什么,如果再次使用,都会发出 404。
于 2010-08-27T17:09:47.420 回答
0

当且仅当用户在步骤 1 中单击“在此计算机上记住我”复选框时,我才会自动登录用户

于 2010-08-27T17:22:24.077 回答
-1

使用电子邮件地址作为用户标识符并没有错。它告诉您进行注册的人在该特定时间可以访问该电子邮件地址。但我确实认为链接应该过期,如果链接过期,请将该电子邮件地址从您的数据库中踢出(因为它可能是其他人的电子邮件)。

由于电子邮件不安全,也不是非常私人的(网上有许多免费的临时电子邮件站点),所以在信任很重要的情况下,您不能真正使用电子邮件。但是对于一个需要某种帐户的简单网站,我认为这不是问题。

对于您对第 2 点的看法,我认为,如果您没有第 2 步,那么您也不必为第 1 步和第 3 步操心。

如果你不让用户验证电子邮件地址,你甚至不应该问它。你不会知道这是一个真实的地址,对应于试图开户的人。

如果您没有电子邮件地址,则无法为用户提供新密码,因为您不知道将其发送到哪里。输入的电子邮件地址可能属于其他人,他们甚至不想在您的网站上拥有帐户。

如果您无法通过电子邮件地址(可靠地)重置密码,那么您根本不应该为登录而烦恼。去一个无账户的网站。

这假设您不使用呼叫中心或帮助台来验证帐户,当然也不处理密码重置。

于 2010-08-27T17:23:48.440 回答