用于验证电子邮件地址的安全系统

时间:2013-07-22 19:25:00

标签: php email identity

来自this question我非常喜欢@ woliveirajr的回答,因为它解决了:

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

    为了避免这种泄漏,您也可以开始注册   通过询问电子邮件来处理。输入后,你会发送一个   带有链接的电子邮件,以便用户可以继续使用   注册过程。如果电子邮件已经注册,你会的   发一封电子邮件说。

         

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

         

    缺点:

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

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

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

2 个答案:

答案 0 :(得分:0)

这样做的一般方法是使用一个不可引用的令牌,例如链接中嵌入的GUID,以便通过GET提交。这应该是安全的,因为在高度统计上,有人会随机猜测任何用户的GUID而不管他们花费多少时间进行猜测,因此甚至不需要到期。

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

答案 1 :(得分:0)

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

你需要的是难以猜测的标记。长而随机是很好的起点。

在过期时不同意AJ有几个原因。

  • 如果您的用户数据库变大,您不希望多年和多年跟踪未使用的令牌。
  • 如果有人请求激活令牌并且几天后不使用它,那么他们就不太可能。不妨将其移除。