Nik*_*lff 5 asp.net forms-authentication
我有一个基于C#和表单身份验证的Asp.net网站.我们使用Active Directory对用户进行身份验证,一切正常.但今天我们意识到只需输入用户名并点击登录即可登录任何帐户,无需提供任何密码!这只发生在localhost上运行的开发环境中(感谢上帝!),但我不喜欢它......
我以前从未见过这种行为,并且真的希望有人解释这是怎么发生的.这是Microsoft构建的开发人员功能吗?或者我的办公室有人在没有告诉其他人的情况下做了一个后门?我将进一步研究这最后一个选项,但在那之前 - 有没有人遇到过这个?
非常感谢提前!
编辑: 这是我输入的每个用户名的身份验证返回true的地方 - 密码为空.其他密码返回false.
using (var context = new PrincipalContext(ContextType.Domain))
{
result = context.ValidateCredentials(username, password);
}
Run Code Online (Sandbox Code Playgroud)
PrincipalContext 是默认值 System.DirectoryServices.AccountManagement
经过更多调查后,我在 MSDN 上发现了这一点,其中指出:
ValidateCredentials方法绑定到构造函数中指定的服务器。如果用户名和密码参数为空,则验证构造函数中指定的凭据。如果构造函数中未指定凭据,并且用户名和密码参数为 null,则此方法将验证当前主体的默认凭据。
以及构造函数文档中的此信息PrincipalContext:
public PrimaryContext(System.DirectoryServices.AccountManagement.ContextType contextType, string name):
contextType:一个 System.DirectoryServices.AccountManagement.ContextType 枚举值,指定主体上下文的存储类型。
name: System.DirectoryServices.AccountManagement.ContextType.Domain 上下文类型的域或服务器的名称、System.DirectoryServices.AccountManagement.ContextType.Machine 上下文类型的计算机名称或托管系统的服务器和端口的名称。 DirectoryServices.AccountManagement.ContextType.ApplicationDirectory 实例。如果 System.DirectoryServices.AccountManagement.ContextType.Domain 上下文类型的名称为 null,则此上下文是线程在其下运行的用户主体的域的域控制器。如果 System.DirectoryServices.AccountManagement.ContextType.Machine 上下文类型的名称为 null,则这是本地计算机名称。对于 System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory 上下文类型,此参数不能为 null。
这使我得出结论,由于我没有name在 的构造函数中使用该属性PrincipalContext,因此在我的开发计算机上时,域控制器将在我自己的主体下运行。这可能意味着它使用我的用户权限,这些权限当然比生产服务器运行的计算机帐户高得多。由于更高级别的权限,这反过来可以使所有使用Validate密码的调用自动验证。null
至少,这是我的理论......欢迎评论和想法,我很快就会结束这个问题。
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |