5

私は標準の .NET メンバーシップ プロバイダーを使用しています。

ValidateUser を呼び出すと、true または false が返されます。このメソッドはユーザー名とパスワードを受け入れるため、返される結果に無効なユーザー名またはパスワードが反映されると考える人もいるでしょう。さらに詳しく調べると、IsLockedOut と IsApproved もチェックしていることがわかります。

public override bool ValidateUser (string username, string password)
{
    MembershipUser user = GetUser (username, false);
    /* if the user is locked out, return false immediately */
    if (user.IsLockedOut)
        return false;
    /* if the user is not yet approved, return false */
    if (!user.IsApproved)
        return false;
    ......

私のアプリケーションでは、IsApproved を独自の手段で利用したいと考えています。私はまだブール結果に制約されているため、独自のプロバイダーを単純にローリングすることはできません。ユーザーを作成すると、必要なすべての情報が得られます。何か不足していますか?

4

1 に答える 1

9

あなたが見ているのはセキュリティ上の決定であると思います.返される情報を制限することで、悪意のある人物に情報を提供していません.

あなたが Web サイトに侵入しようとしている Cyril Cracker だと想像してください。

シナリオ #1: ユーザー名「Admin」とパスワード「Password」を入力しようとすると、システムは失敗したと通知します。あなたが持っている唯一の情報は、管理者/パスワードが有効な組み合わせではないということです.

シナリオ #2: ユーザー名「Admin」とパスワード「Password」を入力しようとすると、システムは、その名前のユーザーが認識されていないと通知します。既知のユーザー名が見つかるまで、さまざまなユーザー名を試し続けることができます。

シナリオ #3: ユーザー名「Admin」とパスワード「Password」を入力しようとすると、システムはパスワードが無効ではないことを示します。突然、「管理者」が有効なユーザーであることがわかります。役に立つことを学んだので、推測し続ける必要があるのはパスワードだけです。

シナリオ #4: ユーザー名「Admin」とパスワード「Password」を入力しようとすると、システムはアカウントがブロックされていることを通知します。これで、有効なユーザー名とパスワードがわかり、アカウントがブロックされました。後で戻ってもう一度試すことができます。

有効なものとそうでないものに豆をこぼすシステムは、おしゃべりなシステムとして知られており、クラックが容易であるため、正当な理由で安全でないと見なされます.

これが役に立てば幸いです。

于 2009-02-13T04:05:11.457 に答える