2

私は Asp.NET メンバーシップ機能の使用について初心者であり、次のようなコードを使用してページ全体のアクセスを拒否することをお勧めできるかどうかを知りたいです。

public partial class AdminPage : Page
{
   [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
   protected void Page_Load(object sender, EventArgs e)
   {
      ...
   }
}

それは良い方法ではないと思いますが、その理由を知りたいです!

ありがとう。

4

2 に答える 2

1

小さな点--クラスに属性を付けます。これにより、適切な権限なしでページに移動するとすぐに、ページでセキュリティ例外が発生します。ユーザーがこのページを表示できないようにするには、URL を表示する前に資格情報を確認してください。クラスの属性は、通常のユーザーがそのクラスのコード行ほど実行しないという強力な保証です。

はい、これは次の理由から優れた手法です。

この属性は、適切な IPrincipal と IIdentity を使用してスレッド プリンシパルと HttpContext User オブジェクトが設定されている場合に機能します。(これはすべて、グローバル asax の要求認証イベントで発生します) これらのインターフェイスは Microsoft によって定義され、十分に文書化されており、MS オペレーティング システム上で実行されるあらゆるアプリケーションで利用できます。したがって、路上で手に入れた半分の能力のある開発者は、コードを読み始める前にこれに精通している可能性があります.

また、Thread の IPrincipal と IIdentity は Microsoft によって使用されているため (大規模なユーザー ベースを持つ大企業である可能性があります)、これは戦闘テスト済みのコードです。ばかげたことをすることもできますが、既存のパターンは、成功の落とし穴に陥るのに役立ちます。

一方、Session にカスタム オブジェクト、マジック クッキー、またはその他のトークンを配置する場合、メンテナンス開発者は、それがどのように機能するかをゼロから学び、悪用可能な脆弱性があるかどうかを確認する必要があります。

于 2011-10-14T12:45:12.320 に答える
0

すべてのページに基本クラスが必要になると思います。たとえば、次のようになります。

public abstract class BasePage : Page
{
    // Note:
    // 1. check on init, not on load
    // 2. override protected method, not handle event
    protected override OnInit(EventArgs e)
    {
        // check permissions here
    }
}
于 2011-10-14T08:50:02.007 に答える