1

ASP.NET アプリ内で、メソッドを使用してユーザーのアクセス許可をチェックし、ユーザーがページを表示できるかどうか、または「無効なアクセス許可」ページにリダイレクトされるかどうかを判断しています。

このパーミッション リダイレクトをマスター ページに追加すると無限ループが発生するため、すべてのページに適用する必要があります。このメソッドをすべてのページにコピーする必要はありません。そのため、このメソッドを保持する Web アプリ内にクラスを作成して、アプリ全体でグローバルに使用できるようにしたいと考えています。

私は正式なトレーニングを受けていませんが、Response.Redirect や「Web」関数をクラスに配置するのは悪い習慣であると直感的に言いますか? 私は正しいですか?もしそうなら、これについてもっと良い方法はありますか?

4

3 に答える 3

3

リダイレクトする前に、現在の URL をチェックして、無効なアクセス許可ページではないことを確認できます。したがって、まだそこにいないときにのみリダイレクトします。

if(!Request.RawUrl.Contains("Invalid Permissions Page"))
    Response.Redirect("Invalid Permissions Page");
于 2012-05-16T16:11:17.587 に答える
1

まず最初に、元の質問:

ASP.NETのクラス内にResponse.Redirectを持つのは悪い習慣ですか?

はい、これは悪い習慣だと思います。デリゲートを渡す方が安全です。そうすれば、「AuthorizeRequest」メソッドでデリゲートを呼び出すことができます。以下に例を示します。

public static void AuthorizeRequest(Action<string> redirect)
{
    if( /*whatever*/ )
        redirect("/InvalidPermissions.htm");
}

protected void Page_Load(object sender, EventArgs e)
{
    AuthorizeRequest(Response.Redirect);
}

今、より大きな問題は... あなたはこれをしたくありません!

各ページに承認を表明させることは、セキュリティの問題を記述するための簡単な方法です。誰かがアサーションを忘れたり、誤って削除したりします。ASP.NET には、まさにこの目的のために要求をインターセプトしてフィルター処理する方法が多数あります。

最も簡単な方法は、これを Global.asax ファイルのイベント フックに配置することです。HttpApplicationオブジェクトには、この目的で使用できるいくつかのイベントがあります。もう 1 つのオプションは、IHttpModuleインターフェイスを実装することです。いずれにせよ、私は各ページにコードを書きません。

于 2012-05-16T16:42:36.200 に答える
1

myPageClass新しいクラスを作ることができSystem.Web.UI.PageますmyPageClass.

public class myPageClass : System.Web.UI.Page
    {
        public void authorize()
        { 
            // your auth code here
            Response.Redirect("Invalid_Permissions_Page.aspx", false);
        }
    }

public partial class _Default : myPageClass
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Your code here
    }
}

私の意見でResponse.Redirectは、ボタンのアクションの場合は使用しないでください。たとえば、別のページに移動する場合、サーバーに移動する必要はありません。それは作成するだけですクライアントで。

于 2012-05-16T16:24:50.403 に答える