我有一个基于asp.net会员安全性的注册页面。基本上,您完成注册并将其登录。
我想按照很多网站使用的方法,一旦您注册,您将通过电子邮件发送到您必须登录的网页的链接,然后才能确认您的注册。而且您知道用户输入了有效的电子邮件。
有两个问题:
我假设您在电子邮件中提供的网址必须是唯一的。它必须设置为过期。我认为,每个用户必须获得不同的URL,因此您必须屏蔽它或者必须验证层级帐户的页面名称才能供所有人使用。而且我认为它必须到期。
这是如何实现的?
答案 0 :(得分:0)
我在PHP方面有更多经验,所以我会提供代码示例,但这些概念应该是跨语言的。
唯一网址:此网址可以很容易地基于用户名的哈希值。 (security_salt可以是任何东西,只是为了防止其他人重新创建URL)。
$ registerurl =" /resigter.php?id =" .md5($ username。" security_salt");
要在一段时间后过期,请使用用户的用户名和他们的页面到期时间建立一个数据库。请求页面时,应检查数据库。
答案 1 :(得分:0)
有一张包含以下内容的表格:
Username Email Date Registered Unique ID Expiry Confirmed Date Confirmed
foo foo@example.com 2013-12-28 15:30 UTC 123456 2013-12-30 15:30 UTC true 2013-12-28 15:35 UTC
因此,要确认的链接可能是www.example.com/ConfirmRegistration.aspx?id=123456
。此页面将检查Expiry
是否在将来Confirmed
是false
以阻止Date Confirmed
多次更新,然后如果这些值为OK,则会设置Confirmed
至true
并将Date Confirmed
设置为当前日期。
应使用RandomNumberGenerator
类的实现生成ID,以便以安全,不可预测的方式生成ID。
过去Expiry
Confirmed
false
Username
的任何条目都可以使用预定流程进行清理,从而允许{{1}}重新注册。
使用唯一ID比使用用户名的哈希更好,因为这会阻止某人注册真实的电子邮件地址,等待他们的数据库条目过期,然后使用虚假的电子邮件地址注册,然后使用用于确认虚假地址的原始电子邮件(因为用户名的哈希值仍然相同)。当然,这假设盐在全局范围内,但如果您为每个用户存储盐,为什么不简单地链接到随机ID,因为无论如何这必须是加密安全的。