Подтвердить что ты не робот

WebMatrix WebSecurity PasswordSalt

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

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

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

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

4b9b3361

Ответ 1

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

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

В WebSecurity 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);

Ответ 2

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

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

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

...

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

сокращено для акцента

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

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

или

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

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