我在查询字符串中发送用户的电子邮件(加密)。 http://localhost:51266/User/User_EditPassword.aspxaccesstype=email&te=U0hSbllMUjFNbHlKR3RvUjB3OUgvK1FSdHVacmkzUFpQK1ZrYmg5YlYvV0t3eklwaTlPTjYrV1V3KzJTN1pWSw==
但是当我点击链接时,它会给我发信息。" 你无法访问 页"那我怎么才能访问
User_EditPassword.aspx
页面,以便用户无需登录系统即可更改密码 ?
答案 0 :(得分:2)
对于实施密码重置机制,您需要处理好几件事。我个人更喜欢使用以下方法:
用户请求新密码。
在客户端如果用户存在或不显示用户 同样的消息ex:"如果用户名是,将发送一封电子邮件 正确"
在服务器端,如果用户存在生成附加到此用户的新随机GUID ,并且具有特定的时间跨度,例如(1小时)。
生成此GUID后,发送一封电子邮件,其中包含指向此用户的链接。它可能看起来像https://website.com/ResetPassword?token=00000000-0000-0000-0000-000000000000
在加载ResetPassword.aspx时检查是否:
如果他们中的任何一个都不是真的向他显示无效令牌的消息,不再继续。
用户将填写新密码和重置密码文本框,在服务器端,您使用提供的令牌获取相应的用户对象,并使用新的哈希版本更新密码。
密码重置成功后,当前用户会话(如果存在)必须无效,并且必须将其重定向到登录页面。
当然,必须记录所有这些交易,并且还必须通知用户他的密码已被更改。
P.S如果您正在使用 ASP.Net授权,则需要特别允许访问此页面
<location path="ResetPassword.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
另请参阅 OWASP忘记密码备忘单: https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet
答案 1 :(得分:0)
为此,您需要在全局应用程序中将HttpContext.Current.SkipAuthorization
属性设置为true(Global.asax
)
你可以写这样的代码
string Url = Request.RawUrl;
string TestUrl = Url.Split('&')[0];
string SessionData = Session["Authenticate"].ToString();
if (TestUrl.EndsWith("User_EditPassword.aspx?accesstype=email"))
{
HttpContext.Current.SkipAuthorization = true;
}