3

Web アプリケーションでは、セキュリティのためにロール、フォーム認証などを定義しますが、Winform を保護する最善の方法は何でしょうか?

実際、ログインに成功した後にログインページを非表示にして、DisplayFormこのように表示するデスクトップアプリケーションを作成しています。

//On successful login
this.Hide()
Form newForm = new DisplayForm();
newForm.Show();

しかし、それが正しい方法かどうかはわかりませんか?DisplayFormログインが成功した後にのみ、ユーザーがこれを見ることができるようにします。

ガイダンスをお願いします。

4

3 に答える 3

3

マイクの答えに続くために、これは私が使用した実装です(OPの要求に従って):

関数定義に以下を追加します。

[PrincipalPermissionAttribute(SecurityAction.Demand, Role = "<Your role>")]
public void YourFunction()
{
    .. do something
}

<Your Role>アクセスを制限する AD ロールはどこにありますか。

次に、関数呼び出しを次のようにラップします。

        try
        {
            YourFunction();
        }
        catch (System.Security.SecurityException)
        {
            MessageBox.Show("You do not have permission to perform this action.", "Access Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
        ...
于 2013-09-12T08:57:33.963 に答える
2

私の答えの前に、次の一般的な発言をさせてください。WinForms アプリケーションには絶対的なセキュリティはありません。ユーザーがアプリケーションを逆コンパイルし、追加した可能性のあるログイン要件を削除して再コンパイルすることを止めるものは何もありません。

とはいえ、あなたのアプローチは正しいと思います。DisplayFormプログラマであるあなたが明示的にそうするように指示するまで表示されません。someInstanceOfDisplayForm.Show()したがって、認証が行われた後にのみ呼び出す場合は問題ありません。

追加のセキュリティ対策 (いくつかのプログラミング ミスを防ぐため) として、一般的な方法は次のとおりです。

  • UserLoggedInユーザーが正常にログインした後、いくつかのグローバル変数¹を設定し、
  • Form_Openこの値をof DisplayForm(または保護したいその他の形式)でチェックします。

¹ ... またはシングルトン プロパティまたはその他の種類のグローバル ストレージ。はい、グローバル変数は悪ですが、アプリケーションにログインしているユーザーは正当な「グローバル状態」の代表的な例であるため、この場合は正当化されると思います。必要に応じて、コメントでこれについてさらに詳しく説明します。

于 2013-09-11T11:19:30.917 に答える