我已经看到有关这个问题的各种问题,但有几个问题没有被问到.如果用户忘记了密码,我希望他们能够仅使用他们的电子邮件地址重置密码(即没有安全问题/答案).密码存储为salted哈希,因此无法恢复.相反,我只是希望用户在确认他们已请求重置后输入新密码.
一个常见的方法是简单地说:
1)创建一个随机的Guid/Cryptographically强随机数
2)将包含随机数的唯一URL发送到用户的电子邮件地址
3)确认后,要求用户更改密码
但是,这不是开放的MITM攻击吗?如果通过互联网向电子邮件发送临时密码是不安全的,那么这样做与仅发送攻击者可以导航到的唯一URL之间的区别是什么?我是否错过了一个可以使这个系统更安全的关键步骤(或者是否有更好的方法来重置密码)?
谢谢
asp.net security asp.net-membership forgot-password password-recovery
我正在使用DefaultMembershipProvider开发一个C#ASP.MVC 4项目,我正在尝试用一种用户友好的方式来恢复/重置丢失的密码.
我的第一次尝试是让用户提供他们的用户名(这是一个有效的电子邮件地址),然后应用程序将生成随机密码(符合我们的要求),然后将密码通过电子邮件发送给用户.
我的理想解决方案是当用户点击忘记密码按钮时.系统会询问他们的用户名,这些用户名在提供时会导致电子邮件与URL一起发送(此URL也会附加到期日期).此解决方案还会重置应用程序内的用户密码(在发送电子邮件之前).当用户单击URL时,它们会自动登录并发送到更改密码表单.这个解决方案有问题吗?
对于配置,我设置了以下值:
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear />
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)