【问题标题】:What is the easiest way to provide a change password link in an email?在电子邮件中提供更改密码链接的最简单方法是什么?
【发布时间】:2012-09-26 17:54:14
【问题描述】:

显然我无法提供包含链接的电子邮件

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

所以我需要

example.com/changepassword.aspx?email=fregrtgethytrhergerg

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

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

【问题讨论】:

  • 链接示例展示了您如何散列(不加密)数据(例如密码)。
  • @gabrjan : 解码 md5 ?这是在开玩笑吗?
  • aha..我想我对什么是散列和加密感到困惑..我需要研究这个...我认为它就像能够在两者之间来回移动一样简单原始文本和一些乱码。
  • 那个链接怎么样?这似乎是我的想法?

标签: asp.net encryption passwords


【解决方案1】:

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

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

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

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

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

这里不需要加密。

【讨论】:

  • 然后过期,也是出于安全原因。重置代码应该只能使用一次。
  • 数据来自外部 API.. 所以我宁愿不必创建表......但我的高级理解是如果我在页面后面的代码上存储用于加密的密钥。 .我不能用它来加密和解密吗?这样我就不需要新表了..
  • @punkouter :加密的问题是你不会有过期延迟:如果你生成一个带有加密邮件的链接,这个链接将始终可用。不是很安全。
  • ...除非您在加密密钥中添加日期!这可能是解决方案。你会发现一些关于加密的问题。例如看这个:stackoverflow.com/questions/202011/….
【解决方案2】:

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

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

example.com/changepassword.aspx?verificationCode=yourUniqueKey

【讨论】:

  • 是的..这是我理解的非加密方式..创建一个guid..发送它..当用户单击链接时..将该guid与用户电子邮件匹配表..我也可以这样做..我认为加密和解密会更容易..也许不是
猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2021-01-30
  • 1970-01-01
  • 2014-08-07
  • 2011-06-14
  • 1970-01-01
相关资源
最近更新 更多