c# – 无需通过电子邮件发送密码即可恢复密码

所以,我一直在玩asp:PasswordRecovery并发现我真的不喜欢它,原因有以下几点:

1)即使无法访问Alice的电子邮件,也可以重置Alice的密码.密码重置的安全问题可以缓解这一问题,但并不能让我满意.

2)Alice的新密码以明文形式发回给她.我想向她发送一个特殊的链接到我的页面(例如像example.com/recovery.aspx?P=lfaj0831uefjc这样的页面),这会让她更改她的密码.

我想我可以通过创建某种过期密码恢复页面表并将这些页面发送给要求重置的用户来自行完成.不知何故,这些页面也可以在幕后更改用户密码(例如,通过手动重置它们然后使用新密码的文本来更改密码,因为密码不能在不知道旧密码的情况下改变).我确定其他人之前遇到过这个问题,这种解决方案让我觉得有点笨拙.有一个更好的方法吗?

理想的解决方案不会通过直接访问数据库来违反封装,而是使用数据库中的现有存储过程……尽管这可能是不可能的.

解决方法:

我目前正在Spring SpringSecurity上实现一个开源user management system,这就是我如何解决丢失的密码问题.

>用户的帐户必须具有预先注册的电子邮件地址.
>要请求重置,用户将其帐户名称输入表单.
>生成临时“重置代码”并将其附加到帐户,并通过电子邮件发送给嵌入在超链接中的用户.
>收到电子邮件后,用户单击链接将其带到页面以输入新密码.
>在接受新密码之前,将根据存储的代码检查重置代码(来自链接),以确保其正确且未过期.

这样可以避免在电子邮件中发送密码(明文).并且它还可以防止一个人重置另一个人的密码只是为了讨厌,因为密码重置只发生在链接使用后.

但它确实依赖于用户的电子邮件帐户是安全的,并且在电子邮件中不会在传输过程中被窥探.对于某些应用,这可能是不可接受的风险.

另一方面是您需要非常小心地更改用户的注册电子邮件地址.至少,用户必须输入他们当前的密码以及更改地址的请求…以防止通过无人参与的登录会话进行黑客攻击.

上一篇:Luogu p2441 角色属性树


下一篇:php – 如何防止自动增量跳过mysql数据库中的id号?