为什么在内置的asp.net2.0成员资格中使用GetPassword()方法而不使用Password of Property

时间:2010-10-20 12:21:36

标签: asp.net asp.net-membership

我发现密码只能通过asp.net2.0 Membership中的方法GetPassword()来检索。

事实上,当我们从数据库获取用户信息并将其设置为用户的属性(MemberhsipUser的对象)时,我们可以获取密码,就像user.Email,user.UserName等

一样。

很明显,采用第二个分辨率(属性)可以减少服务器和数据库之间的一次旅行,更方便。但为什么微软不这样做呢?出于安全原因?那么为什么将密码设置为属性不太安全?

2 个答案:

答案 0 :(得分:1)

是的原因是安全。

此处的密码不是SecuredString(它必须是,但由于向后兼容性,它可能无法更改)。在大多数情况下,您只需要会员信息和一般信息。如果password是一个属性,它将保留在内存中,直到请求完成并且它被垃圾收集。如果多个应用程序共享主机,则可能(尽管非常不可能也很困难)另一个应用程序访问进程内存块(因为它在同一进程中运行)并获取密码。

答案 1 :(得分:0)

使用.NET Reflector查看反射...

我发现GetPassword方法是一种虚方法,可以被提供者轻松覆盖。这就是你不使用Property开始的原因。


public virtual string GetPassword()
{
    return Membership.Providers[this.ProviderName].GetPassword(this.UserName, null);
}

哦,当然还有安全性!