需要唯一的电子邮件,而不泄露现有用户的电子邮件

时间:2010-09-04 12:36:44

标签: security design-patterns

在标准网络注册表单中,用户需要拥有该网站的唯一电子邮件。

如果电子邮件已被使用,则无法使用该电子邮件创建新用户 - 但是这会打开操作以利用此信息查找,哪些电子邮件是该网站的成员(至少检查是否正在使用特定电子邮件) )。

确保机器人不能进行大规模查询是相当简单的 - 但有没有办法完全避免它?

我能想到的最好的事情是让用户创建进程失败并显示未知错误,并在后台向地址发送电子邮件,解释密码重置过程。

我错过了更好的选择吗?

更新

我希望避免新用户在99.9%的时间内退出注册过程,此时电子邮件实际上是唯一的。因此,停止注册过程以等待用户单击电子邮件中的链接并不是一个完美的解决方案,尽管在某些用例中可能是可行的。

3 个答案:

答案 0 :(得分:3)

让注册继续正常进行,但在确认电子邮件中,您应该说:

"You allready have an accout bla, click here to cancel this registration, or continue with new registration and delete your current account"

这样,垃圾邮件发送者永远不会知道更好,非常友好。

答案 1 :(得分:1)

您可以在网页上打印一些内容:

  

系统会向您发送一封电子邮件,以验证电子邮件地址。检查您的邮件,然后单击包含的(共享密钥)链接。

即。你可能必须验证用户的电子邮件,不管怎么说。你可以在对话的这个位置做到这一点......

答案 2 :(得分:0)

许多网站会将邮件发送到包含随机生成的验证码的指定电子邮件地址,并且只有在用户确认他们能够阅读该邮件并获取验证码后才接受用户注册。通常邮件包含一个用户只需点击确认的URL。

如果您这样做,您需要做的就是发送确认电子邮件,告诉用户他们已经注册并解释密码重置程序。

无论Web开发框架是什么,都可能有一个处理确认邮件的包。

请注意,您必须考虑用户拥有电子邮件地址并使用它注册到您的网站的情况,然后他们消失而不更改地址并停止使用该地址,而另一个用户现在拥有该地址并且想要注册。这里没有简单的答案。

已添加:您添加了不需要确认电子邮件的信息,以便立即进行注册。此要求与唯一的电子邮件地址相矛盾,因为您不知道用户提供的电子邮件地址在确认之前是合法的,并且强制执行用户选择的字符串的唯一性是没有意义的就像一个电子邮件地址(如果你想要一个唯一的用户名,它不需要像电子邮件地址那样格式化)。

如果您想保持即时注册,则必须将电子邮件地址视为不受信任的文本字段,直到确认为止。这意味着,如果用户未确认其电子邮件地址,则每个要求您的网站发送邮件的操作都必须爆炸。确认过程几乎保持不变,但现在,如果地址是重复的,则必须为用户提供合并两个帐户的选项(这听起来很难),或者告诉他必须关闭两个帐户中的一个或更改与两个帐户之一关联的电子邮件地址。