所以,我一直在玩asp:PasswordRecovery
发现我真的不喜欢它,原因有几个:
1) 即使无法访问 Alice 的电子邮件,也可以重置 Alice 的密码。密码重置的安全问题缓解了这个问题,但并不能真正令我满意。
2) Alice 的新密码以明文形式发回给她。我宁愿向她发送一个指向我的页面的特殊链接(例如 example.com/recovery.aspx?P=lfaj0831uefjc 之类的页面),这将让她更改密码。
我想我可以自己通过创建某种过期密码恢复页面表并将这些页面发送给要求重置的用户来完成此操作。不知何故,这些页面还可以在幕后更改用户密码(例如,通过手动重置密码,然后使用新密码的文本来更改密码,因为在不知道旧密码的情况下无法更改密码)。我确信其他人以前也遇到过这个问题,而这种解决方案让我觉得有点老套。有一个更好的方法吗?
理想的解决方案不会通过直接访问数据库来违反封装,而是使用数据库中现有的存储过程......尽管这可能是不可能的。
我目前正在实施一个开源用户管理系统 http://metadata.net/sites/emmet-0.4-SNAPSHOT/在 Spring + SpringSecurity 之上,以下是我解决丢失密码问题的方法。
- 用户的帐户必须有预先注册的电子邮件地址。
- 要请求重置,用户需要在表单中输入其帐户名。
- 生成临时“重置代码”并将其附加到帐户,并通过嵌入超链接的电子邮件发送给用户。
- 收到电子邮件后,用户单击链接进入输入新密码的页面。
- 在接受新密码之前,将根据存储的代码检查重置代码(来自链接),以确保其正确且未过期。
这可以避免在电子邮件中发送密码(明文)。它还可以防止一个人重置另一个人的密码只是为了造成麻烦,因为密码重置仅在使用链接后才会发生。
但它确实依赖于用户电子邮件帐户的安全,以及电子邮件在传输过程中不被窥探的情况。对于某些应用程序来说,这可能是不可接受的风险。
另一个因素是,您在更改用户的注册电子邮件地址时需要非常小心。至少,用户必须在请求更改地址时输入当前密码……以防止通过无人值守的登录会话进行黑客攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)