1

这个问题我真的很喜欢@woliveirajr 的回答,因为它解决了:

  1. 如何防止泄露网站上使用的电子邮件地址
  2. 验证电子邮件地址的所有者

为了避免这种泄漏,您还可以通过询问电子邮件来开始注册过程。输入后,您将发送一封带有链接的电子邮件,以便用户可以继续注册过程。如果该电子邮件已注册,您将发送一封电子邮件,说明这一点。

这样,只有电子邮件的所有者才能注册。

缺点:

  • 可能真正的普通用户会因为注册的步骤太多而感到无聊。
  • 在极少数情况下,简单地透露电子邮件已在站点中注册是一个问题,特别是因为在任何提供您想要的电子邮件的站点上注册都很容易。您将不会收到激活帐户的电子邮件,但通常该站点会将帐户/用户名链接到该电子邮件。

我不确定的是如何实现一个系统,用户只能在单击电子邮件中的链接时访问注册页面。注册页面是否会使用 GET 检索传递给它的数据并验证“代码”以了解用户是否可以注册,并且此代码每 30 分钟更改一次?例如,通过电子邮件发送的注册链接可能会mysite.com/register.php?secretcode=as18d检查register.php“代码” as18d,但此代码每 30 分钟会更改一次。这是这个主意吗?代码是否会由基于系统时间的加盐哈希生成?

或者,可以通过电子邮件发送带有几个字母的链接,而不是电子邮件,用户进入注册页面进行身份验证,有点像捕获的工作方式,但不是真的。

4

2 回答 2

0

解决此问题的一般方法是使用无法猜测的令牌,例如嵌入在链接中的 GUID,以便它与 GET 一起提交。这应该是安全的,因为无论用户花费多少时间尝试猜测,从统计上来说,某人随机猜测任何用户的 GUID 是极不可能的,因此甚至不需要过期。

值得注意的是,这应该通过 SSL 链接完成,以避免中间人破坏验证过程的可能性。

于 2013-07-22T19:53:55.120 回答
0

服务器端无法保证 HTTP 请求来自电子邮件消息中的链接。你不能相信来自客户端的任何东西;它都可以被欺骗和操纵。

您需要的是一个难以猜测的令牌。长而随机是很好的起点。

出于几个原因,不同意 AJ 的到期。

  • 如果您的用户数据库变大,您不希望多年来跟踪未使用的令牌。
  • 如果有人请求激活令牌并在几天后没有使用它,那么他们不太可能会使用它。还不如去掉。
于 2013-07-22T22:47:45.290 回答