来自this question我非常喜欢@ woliveirajr的回答,因为它解决了:
为了避免这种泄漏,您也可以开始注册 通过询问电子邮件来处理。输入后,你会发送一个 带有链接的电子邮件,以便用户可以继续使用 注册过程。如果电子邮件已经注册,你会的 发一封电子邮件说。
这样,只有电子邮件的所有者才能注册。
缺点:
- 可能真正的普通用户会因为有这么多步骤来注册而感到无聊。
- 在极少数情况下简单地揭示电子邮件已在网站上注册是一个问题,特别是因为它很容易 在任何提供您想要的电子邮件的网站上注册。你会的 将不会收到激活您的帐户的电子邮件,但一般情况下 网站会将帐户/用户名链接到该电子邮件。
我不确定的是如何实现一个系统,用户只有在点击电子邮件链接时才能访问注册页面。注册页面是否会检索使用GET传递给它的数据并验证“代码”以了解用户是否可以注册,并且此代码每30分钟更改一次?例如,电子邮件注册链接可以是mysite.com/register.php?secretcode=as18d
,register.php
可以检查“代码”as18d
,但此代码每30分钟会更改一次。这是个主意吗?代码是否会根据系统时间由salted哈希生成?
或者,可以通过电子邮件发送用户进入注册页面进行身份验证的电子邮件,而不是电子邮件,有点像捕获工作但不是真的。
答案 0 :(得分:0)
这样做的一般方法是使用一个不可引用的令牌,例如链接中嵌入的GUID,以便通过GET提交。这应该是安全的,因为在高度统计上,有人会随机猜测任何用户的GUID而不管他们花费多少时间进行猜测,因此甚至不需要到期。
值得注意的是,这应该通过SSL链接完成,以避免中间人可能会破坏验证过程。
答案 1 :(得分:0)
服务器端无法保证HTTP请求来自电子邮件中的链接。你不能相信客户方面的任何事情;它都可以被欺骗和操纵。
你需要的是难以猜测的标记。长而随机是很好的起点。
在过期时不同意AJ有几个原因。