0

显然我无法提供带有链接的电子邮件

example.net/changepassword.aspx?email=bob@example.com

所以我需要

example.com/changepassword.aspx?email=fregrtgethytrhergerg

我怎样才能做到这一点?我假设我需要一个加密密钥?我可以在不创建额外数据库表的情况下完成所有这些操作吗?我对安全一无所知。

我发现可能与我想要的最接近的解释是一篇关于How to Hash and Salt Passwords in ASP.NET的文章。

4

2 回答 2

3

我在这里假设您要创建一个“恢复丢失的密码页面”,该页面向您的用户发送电子邮件。这是真的?

您不想创建新表,但可以在现有表中创建一个(或两个)新列吗?

如果是这样,您可以在现有表中添加一个“guid”列和另一个列“guidExpirationDate”。

当用户要求输入新密码时,在表(代码:)中创建一个 Guid,Guid.NewGuid()并设置一个到期日期DateTime.Now.AddMinutes(30),例如。

在您的链接中,提供 Guid 而不是电子邮件地址。出于安全原因,当页面加载时,请验证 Guid 没有过期。

这里不需要加密。

于 2012-10-05T14:47:19.633 回答
1

您可以将一列 ( VerificationCode ) 添加到您的表中,该列将包含一个 unquie 值(您可以使用 GUID)。

当用户请求更改密码时,生成并更新数据库中的验证码并在 URL 中使用相同的验证码:

example.com/changepassword.aspx?verificationCode=yourUniqueKey
于 2012-10-05T14:54:12.270 回答