Зачем использовать метод GetPassword (), а не свойство пароля во встроенном членстве asp.net2.0 - PullRequest
2 голосов
/ 20 октября 2010

Я считаю, что пароль может быть получен только методом GetPassword () в asp.net2.0 Membership.

Фактически, мы можем получить пароль, когда мы получаем информацию о пользователе из базы данных и устанавливаем его каксвойство пользователя (объект MemberhsipUser) так же, как user.Email, user.UserName и т. д.

Понятно, что принятие второго разрешения (свойства) может сократить одну поездку между сервером и базой данных и сделать это более удобнымНо почему Microsoft так не делает?По соображениям безопасности?Тогда почему менее безопасно устанавливать пароль в качестве свойства?

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Да, причина в безопасности.

Здесь пароль не является SecuredString (которым он должен быть, но, вероятно, его нельзя изменить из-за обратной совместимости).В большинстве случаев вам нужна только информация о членстве и общая информация.Если пароль является свойством, он будет оставаться в памяти до тех пор, пока запрос не будет завершен и не будет собран мусор.Если несколько приложений совместно используют хост, для другого приложения будет возможно (хотя и очень маловероятно и трудно) получить доступ к блоку памяти процесса (поскольку он выполняется в том же процессе) и получить пароль.

0 голосов
/ 20 октября 2010

Посмотрите на отражение ... с помощью .NET Reflector.

Я обнаружил, что метод GetPassword является виртуальным методом и может быть легко заменен поставщиками. Вот почему вы не используете Property для начала.


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

Да, и безопасность, конечно же!

...