WebMatrix WebSecurity PasswordSalt - PullRequest
       7

WebMatrix WebSecurity PasswordSalt

27 голосов
/ 25 февраля 2011

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

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

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

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

Ответы [ 2 ]

36 голосов
/ 02 мая 2012

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

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

В 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);
4 голосов
/ 25 февраля 2011

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

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

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

...

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

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

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

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

или

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

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

...