WebMatrix WebSecurity PasswordSalt

Я использую WebMatrix и создал веб-сайт на основе StarterSite. На этом начальном сайте вы получаете хороший базовый макет, включая регистрацию, вход в систему, страницы с забытым паролем и т. Д.

Я заметил, что в базе данных таблица «webpages_Membership» имеет столбец с именем «PasswordSalt». После создания нескольких новых учетных записей пользователей этот столбец всегда остается пустым. Поэтому я предполагаю, что соль пароля (даже по умолчанию) не используется.

Очевидно, что это не лучшая практика, однако я не могу найти документацию, в которой рассказывается, как установить или управлять солью пароля.

Как установить соль пароля с помощью WebSecurity Helper?


person Stuart Clement    schedule 25.02.2011    source источник


Ответы (2)


Приведенный выше ответ создает впечатление, что при использовании WebSecurity SimpleMembershipProvider соление не применяется.

Это неправда. Действительно, поле соли базы данных не используется, однако это не означает, что при хешировании пароля не создается соль.

В WebSecuritys SimpleMembershipProvider используется алгоритм PBKDF2, случайная соль генерируется StaticRandomNumberGenerator и сохраняется в поле пароля с хешем:

byte[] outputBytes = new byte[1 + SALT_SIZE + PBKDF2_SUBKEY_LENGTH];
Buffer.BlockCopy(salt, 0, outputBytes, 1, SALT_SIZE); 
Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SALT_SIZE, PBKDF2_SUBKEY_LENGTH);
return Convert.ToBase64String(outputBytes);
person Andreas    schedule 02.05.2012
comment
Вот более подробное сообщение: mikesdotnetting.com/Article/200/ - person Bryan; 30.10.2012
comment
Как упоминал Майк Бринд Простой членский провайдер фактически использует соленый хэш. Но соль основана на хеш-значении. Пароль можно хэшировать с помощью System.Web.Helpers.Crypto.HashPassword(password) и сравнивать с простой строкой пароля с помощью System.Web.Helpers.Crypto.VerifyHashedPassword(hashed, password ) - person Aryan Firouzian; 27.10.2017

Начиная с выпуска RTM веб-страниц WebMatrix/ASP.NET, функция/столбец соли не используется.

Если вы откроете исходный код веб-страниц, вы увидите, что классы db усеяны такими ссылками, как

INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt

...

VALUES (uid, hashedPassword,String.Empty /* salt column is unused */

сокращено для выделения

Определенно есть способы переопределить и реализовать это поведение, в первую очередь:

  • переопределить System.WebData.SimpleMembershipProvider.CreateAccount()

or

  • расширить с помощью System.WebData.SimpleMembershipProvider.CreateAccountWithPasswordSalt()

не буду вдаваться в подробности, если только вы не попросите, поскольку ваше использование WebMatrix и шаблона предполагает, что вы, вероятно, не хотите возиться с переписыванием тонны своего собственного кода C#/ASP для этого проекта.

person Taylor Bird    schedule 25.02.2011