27

私は WebMatrix を使用しており、「StarterSite」に基づいて Web サイトを構築しました。このスターター サイトでは、登録、ログイン、パスワードを忘れたページなどを含む基本的なレイアウトが表示されます。

データベースで、「webpages_Membership」テーブルに「PasswordSalt」という名前の列があることに気付きました。いくつかの新しいユーザー アカウントを作成した後、この列は常に空白のままになります。したがって、パスワード ソルト (デフォルトのソルトでさえも) は使用されていないと想定しています。

明らかにこれはベスト プラクティスではありませんが、パスワード ソルトの設定または管理方法を説明するドキュメントが見つからないようです。

WebSecurity Helper でパスワード ソルトを設定するにはどうすればよいですか?

4

2 に答える 2

36

上記の回答は、使用時にソルトが適用されていないという印象を与えますWebSecurity SimpleMembershipProvider

そうではありません。実際、データベースのソルト フィールドは使用されませんが、これは、パスワードのハッシュ時にソルトが生成されないことを示しているわけではありません。

PBKDF2 アルゴが使用される場合、ランダム ソルトが によって生成されWebSecurity、ハッシュとともにパスワード フィールドに格納されます。SimpleMembershipProviderStaticRandomNumberGenerator

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);
于 2012-05-02T15:25:51.563 に答える
4

WebMatrix/ASP.NET Web ページの RTM リリースの時点で、salt 機能/列は使用されていません。

Web ページのソースを開くと、次のような参照が散らばっている 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 とテンプレートの使用法から、このプロジェクトのために大量の独自の C#/ASP コードを書き直すことはおそらくしたくないと思われるため、リクエストがない限り、詳細には触れません。

于 2011-02-25T14:29:10.997 に答える