2011-09-01 122 views
1

我正在验证用户的电子邮件地址。
大多数人告诉的方式是创建一些独特的令牌存储在db和 发送给用户。从“电子邮件+盐”作为标记哈希以验证电子邮件

我正在使用哈希(sha256)电子邮件地址与全站盐
并将此散列发送给用户。

我是否错过了一些东西或者是否足以验证?

+1

电子邮件或电子邮件地址? (您刚刚确认用户的电子邮件地址?) – John

+0

电子邮件地址 - 只需确认 – Jask

+0

有关您使用此环境的更多信息将会有所帮助。正如所写,似乎第三方可以拦截包含该令牌的用户的电子邮件,然后使用具有欺骗性发件人地址的令牌来回复将验证但不是来自实际用户的电子邮件。 – hatchet

回答

1

一些可能值得一看(或不)的东西。

如果有人发现你的盐,那么他们可以重建你的哈希和洪水你的系统。在这种情况下,您需要确保用户请求将他们的电子邮件地址添加到您创建的任何内容中。 (也就是说,我不会将散列存储在数据库中)

另外,如果salt相同,如果他们再次请求同一个电子邮件地址,散列值将相同。每次发出请求时,你是否想要不同的哈希值,即使是相同的电子邮件地址?您可以将服务器日期/时间连接到电子邮件地址,然后再对其进行散列以使其每次都不同。

+0

添加日期时间有额外的好处,你可以使用它在设定的时间后“过期”令牌......说24小时。 – hatchet

+0

@hatchet:我*几乎*写在。:)不能通过在DB中记录请求时间来实现到期吗? – John

+0

你是对的。我正在考虑加密/解密,而不是匹配哈希值。 – hatchet

1

你可以这样做,如果没有人得到服务器端的salt,它就是保存。最后,它是电子邮件验证,如果您不需要出于法律原因进行验证,则不需要使其更复杂。

但这取决于你的目标。希望它变得更安全吗?你想轻松实现吗?你想让它容易维护吗?你在考虑脚本的执行时间吗?

顺便说一句:当电子邮件中有一个长链接时,一个非常讨厌的事情:可能有电子邮件客户端打破了你的链接,所以也许随着链接添加代码,如果代码没有完全通过链接传输,有一个用户可以添加代码的表单。