2009-02-13 95 views
5

我正在使用标准的.NET成员资格提供程序,并认为我会看到是否有人可以照亮它。为什么ValidateUser不会返回更多?

调用ValidateUser返回true或false。现在,由于该方法接受用户名和密码,因此会导致返回结果反映无效的用户名或密码。然而,如果我们深入研究它,我们会发现它也在检查IsLockedOut和IsApproved。

public override bool ValidateUser (string username, string password) 
{ 
    MembershipUser user = GetUser (username, false); 
    /* if the user is locked out, return false immediately */ 
    if (user.IsLockedOut) 
     return false; 
    /* if the user is not yet approved, return false */ 
    if (!user.IsApproved) 
     return false; 
    ...... 

在我的应用程序中,我想用我自己的方式使用IsApproved。简单地滚动我自己的提供者将不起作用,因为我仍然受限于bool结果。创建一个用户给我们提供了我们需要的所有信息,那么为什么不使用ValidateUser呢?我错过了什么吗?

回答

9

我期望你看到的是一个安全决定 - 通过限制返回的信息,他们不会向恶意方提供信息。

想象一下,你是Cyril Cracker,试图闯入一个网站。

场景#1: 您尝试输入用户名“Admin”,密码为“Password”,系统会告诉您禁止。您唯一的信息是管理员/密码不是有效的组合。

场景#2: 您尝试输入用户名“Admin”并输入密码“Password”,系统会告诉您没有该用户名。您可以继续尝试不同的用户名,直到找到一个已知的。场景#3:您尝试输入用户名“Admin”并输入密码“Password”,系统会告诉您密码无效。突然间,你知道“管理员”是一个有效的用户。你已经学到了一些有用的东西,你需要继续猜测的是密码。

情况#4:您尝试输入用户名“Admin”,密码为“Password”,系统会告诉您该帐户已被阻止。现在,您知道一个有效的用户名和密码,并且该帐户被阻止。您可以稍后再来,然后重试。

系统溢出豆有效,什么不是,被称为健谈系统,他们被认为不安全的原因很好,因为他们更容易破解。

希望这是有帮助的。

+0

完美感! – mickyjtwin 2009-02-13 04:19:32