如何通过电子邮件asp.net发送密码链接时绕过登录验证?

时间:2017-06-20 02:28:21

标签: c# asp.net email security query-string

  

我在查询字符串中发送用户的电子邮件(加密)。   http://localhost:51266/User/User_EditPassword.aspxaccesstype=email&te=U0hSbllMUjFNbHlKR3RvUjB3OUgvK1FSdHVacmkzUFpQK1ZrYmg5YlYvV0t3eklwaTlPTjYrV1V3KzJTN1pWSw==

     

但是当我点击链接时,它会给我发信息。" 你无法访问   页"那我怎么才能访问

User_EditPassword.aspx

  

页面,以便用户无需登录系统即可更改密码   ?

2 个答案:

答案 0 :(得分:2)

对于实施密码重置机制,您需要处理好几件事。我个人更喜欢使用以下方法:

  1. 用户请求新密码。

  2. 在客户端如果用户存在或不显示用户 同样的消息ex:"如果用户名是,将发送一封电子邮件 正确"

  3. 在服务器端,如果用户存在生成附加到此用户的新随机GUID ,并且具有特定的时间跨度,例如(1小时)。

  4. 生成此GUID后,发送一封电子邮件,其中包含指向此用户的链接。它可能看起来像https://website.com/ResetPassword?token=00000000-0000-0000-0000-000000000000

  5. 在加载ResetPassword.aspx时检查是否:

    • 令牌是正确的。
    • 令牌仍然有效。

    如果他们中的任何一个都不是真的向他显示无效令牌的消息,不再继续

  6. 用户将填写新密码和重置密码文本框,在服务器端,您使用提供的令牌获取相应的用户对象,并使用新的哈希版本更新密码。

  7. 密码重置成功后,当前用户会话(如果存在)必须无效,并且必须将其重定向到登录页面。

  8. 当然,必须记录所有这些交易,并且还必须通知用户他的密码已被更改。

    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;
}