6

データベース スキーマに適合させるために、現在の ASP .Net プロジェクト用にカスタム メンバーシップ プロバイダーを作成する必要がありました。標準プロバイダー。

これは自分で実装する必要があるものですか、それとも本質的にサポートする必要がありますか?

特にそれを処理するコードはありません (そして、インターフェイス メンバーのどれも特にそれを処理していないようです) が、自分で実装する必要がある場合、ロックアウトされていることをユーザーに通知するにはどうすればよいですか? ValidateUser で何らかの例外を発生させる必要がありますか?

解決

Dave R によって提供されたリンクは、メンバーシップがどのように機能するかについて深く掘り下げたものであり、Zhaph が指摘したことは、カスタム メンバーシップ プロバイダーでロックアウトされたロジックを処理することでした。

次に、Login コントロールの LoginError イベントを使用してエラー状態を処理し、そこにチェックインして、適切なエラー メッセージを表示するためにユーザーがロックアウトされているかどうかを確認しました。

4

4 に答える 4

7

Scott Mitchell は、ASP.NET サイトで優れた一連のチュートリアルを作成しています。このリンクには、カスタム プロバイダーの作成に関する情報が含まれており、ロック ロジックについて説明しています。

http://www.asp.net/LEARN/security/tutorial-06-cs.aspx

また、アカウントのロックを解除する組み込みの方法もありません (つまり、SqlMembershipProvider に似たものを使用している場合は、データベース ツールを使用してロックを解除する必要があります)。Scott は、これを管理するための UI の作成に関する記事も書いています。

http://www.asp.net/LEARN/security/tutorial-14-vb.aspx

シリーズ通して読むことをお勧めします。スコットは優れたコミュニケーターです。

これが役立つことを願っています。

于 2008-12-10T13:48:02.077 に答える
3

ロックアウトにつながる条件を複製します(不正なログイン試行が多すぎます)。メンバーシッププロバイダーは毎回バックエンドにアクセスするため、このアプローチを妥当な数のMaxInvalidPasswordAttemptsを持つプロバイダーに限定するのが賢明です。

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100)
       {
                for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++)
                {
                    Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl");
                }
        }
于 2010-01-14T12:40:22.877 に答える
3

これは、自分で書かなければならないものです。

既定のデータベース スキーマには、aspnet_Membership テーブルに次の列があります。

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

試行回数は、試行ウィンドウ内で試行が失敗するたびに増分され、最初に失敗した試行の時間がウィンドウ開始列に格納されます。FailedPasswordAttemptCount が構成の maxInvalidPasswordAttempts と等しくなると、IsLockedOut が設定されます。

Michiel が述べているように、ValidateUser メソッドは、プロバイダー構成の設定に基づいてこれらの値を確認する必要があります。デフォルトでは次のとおりです。

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

ユーザーのログイン試行回数が最大に達したら、プロバイダーから MembershipUser.IsLockedOut が設定されていることを確認する必要があります。その後、その値を確認して適切に動作させることができます。デフォルトのログイン コントロールを使用している場合は、これを行います。値はおそらくすでにチェックされています。

于 2008-12-10T13:56:28.737 に答える
0

カスタム メンバーシップ プロバイダーでは、ValidateUser 関数を実装する必要があります。そこでは、ユーザー名とパスワードが有効かどうかを確認するだけでなく、無効なパスワードの試行回数などもデータストアから取得します。ユーザー名/パスワードが有効な場合はパスワードの試行回数をリセットし、そうでない場合は試行回数を増やします。SqlMembershipProvider は LastAttempt 日時も格納するため、特定の時間枠内での試行が許可されていないため、ブルートフォース攻撃を行うことはできません。

于 2008-12-10T13:15:48.647 に答える