asp.net-membership - 为什么 ValidateUser 不返回更多?

标签 asp.net-membership membership membership-provider

我正在使用标准的 .NET 成员资格提供程序,并认为我会看看是否有人可以对此有所了解。

调用 ValidateUser 返回 true 或 false。现在,由于该方法接受用户名和密码,因此可以推断返回结果将反射(reflect)无效的用户名或密码。然而,如果我们进一步深入研究,我们会发现它也在检查 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 呢?我错过了什么吗?

最佳答案

我希望您看到的是安全决策——通过限制返回的信息,他们不会向恶意方提供信息。

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

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

场景#2:
您尝试输入用户名“Admin”和密码“Password”,系统会告诉您该名称的用户是未知的。您可以继续尝试不同的用户名,直到找到已知的用户名。

场景#3:您尝试输入用户名“Admin”和密码“Password”,系统告诉您没有密码无效。突然间,您知道“Admin”是一个有效用户。你已经学到了一些有用的东西,你需要继续猜测密码。

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

将 bean 洒在有效和无效上的系统称为 健谈系统 ,并且它们被认为是不安全的,因为它们更容易破解。

希望这是有帮助的。

关于asp.net-membership - 为什么 ValidateUser 不返回更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/544646/

相关文章:

asp.net-mvc - 如何限制对 MVC 中 Controller 或文件夹的访问?

asp.net - 如何使用 ASP.NET Web 配置拒绝访问文件,而不仅仅是本地访问?

Asp.net 在运行时覆盖成员资格设置 (asp.net mvc)

asp.net-membership - SQL 创建 .Net Membership Provider 用户

mysql - 对现有用户使用 MySql ASP.NET 成员资格提供程序

asp.net-mvc - ASP.NET 成员(member) : Custom Profile Inheritance

asp.net-mvc - 如何在ASP.NET MVC模型中获取当前用户

c# - 使用 ASP.NET MVC 和 SqlMembershipProvider 在哪里存储额外的用户详细信息?

wordpress - 以编程方式创建交易成员(member)