2011-02-01 88 views
3

我有一个允许用户重置密码的ASP.NET。在ASP.NET应用程序中重置密码的安全性

过程是

  1. 上通过电子邮件重置链接用户点击。该链接包含一个安全令牌。
  2. 用户被带到第1页的应用程序,并回答安全问题
  3. 如果问题是正确的,然后进入第2页并重置密码。

所有数据安全地存储在数据库等我最关心的是第1和2,并确保人们不能直接进入第2页,更改其密码之间的相互作用。

为了防止这一点,我打算。

  1. ,请务必检查引用页是第1页时,第2页和弹跳如果它不
  2. 将附带在会议电子邮件中的链接第1页上的安全令牌,只允许如果使用第2页这仍然在会议中。
  3. 会话超时时间短,所以输入密码的时间有限。也可以在数据库中记录他们完成第1页的时间。

我的问题是。 这是一个狡猾的计划,或任何人都可以看到它的缺陷?

回答

2

您的计划的第1步可能无法正常工作,依靠引荐来源值可用它是a)容易欺骗,b)经常被偏执狂用户禁用。

第2步听起来像你想要实现一个CSRF令牌类型的方法,这是一个好主意。

要保护的主要是电子邮件中发送的安全令牌,只要攻击者不能在没有阅读电子邮件的情况下确定该令牌,它就相对安全。如果攻击者可以阅读用户的电子邮件,那么任何密码恢复方案都将被破坏。

2

我认为令牌应存放在数据库中,无效的,如果:

  • 一定的时间跨度经过
  • 一个新的电子邮件产生
  • 用户重置密码
2

你为什么不把用户放在同一个页面上呢? 我会使用WizardControl

如果您决定采用双页面方式,可以在给定令牌的安全问题已正确回答时在数据库中设置标志。在第2页中,检查是否设置了标志,如果不是 - >重定向到第1页。

+1

好点,好方便。 – Greg 2011-02-01 17:03:35

相关问题