2010-10-20 47 views
2

我發現密碼只能通過asp.net2.0 Membership中的GetPassword()方法獲取。爲什麼使用GetPassword()方法而不是內置密碼屬性asp.net2.0成員

事實上,我們可以得到密碼,當我們從數據庫的用戶信息來源,並將其設置爲用戶(MemberhsipUser的對象)的屬性,就像user.Email,user.UserName等

這是清楚的是,採用第二種解決方案(屬性)可以減少服務器和數據庫之間的一次旅程,並且更加方便。但爲什麼微軟不這樣做?爲了保密的原因?那麼爲什麼將密碼設置爲屬性不太安全?

回答

1

是的原因是安全。

這裏的密碼不是一個SecuredString(它必須是它可能不會因爲向後兼容性而改變)。在大多數情況下,您只需要會員信息和一般信息。如果密碼是屬性,它將一直保留在內存中,直到請求完成並且垃圾被收集。如果多個應用程序共享主機,那麼其他應用程序可以訪問進程內存塊(因爲它在同一進程中運行),並且可以獲得密碼。

0

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

我發現GetPassword方法是一種虛擬方法,可以很容易被提供者覆蓋。這就是你不用Property開始的原因。


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

哦,當然安全!

相關問題