0

CAS をテストするために、次のコードを作成しました。

    [SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)]
    static void Main(string[] args)
    {
        Console.WriteLine("hello, world!");
    }

.NET 2.0 構成では、上記のアセンブリの厳密な名前を使用してコード グループを作成し、そのグループにNothing権限セットを付与します。そのため、アセンブリは期待どおりに開始できませんでした。

しかし、次の属性を削除すると、次のことに気付きました。

[SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)]

プログラムはまだ開始できませんでした。では、属性を使用したこのいわゆる宣言型セキュリティのポイントは何でしょうか?

CAS に関するいくつかのチュートリアルを読みましたが、それらは命令型/宣言型セキュリティを使用して CAS を使用しています。しかし、上記のサンプルから、それは必要ではないようです。

命令型/宣言型セキュリティを使用せずに意図的にコードを記述し、アセンブリの証拠を提供しない場合、CAS はセキュリティ ポリシーを強制できなくなりますか?

または、CAS の使用方法を誤解していますか?

ありがとう。

4

1 に答える 1

1

CAS パーミッション要求により、要求を行うメソッドの上の各コール スタック フレームが検証されます。アセンブリは Main メソッドを呼び出すコードを実行しないため、要求はどのコードに対しても評価されません。

アセンブリの実行を妨げているのは、ポリシーによる実行権限の拒否です。アクセス許可は、アセンブリ コードを実行するときに、CLR 自体によって評価されています。独自の許可要求を追加する必要はありません。

少し戻って、CAS 要求 (宣言的または命令的) がどのように使用されることを意図しているかを確認するには、アクセス許可によってリソースへのアクセスが保護されることを考慮してください。リソース (例: ファイル システム) へのアクセスを許可するコードで、他の方法ではマネージド コードにアクセスできない場合は、そのリソースへのアクセスを制御するために使用できるアクセス許可 (例: FileIOPermission) を提供する必要があります。リソースへのアクセスを許可するコードは、リソースへのアクセスを許可する前に、そのアクセス許可を要求する責任もあります。

マネージ コードを作成するほとんどの開発者は、通常、.NET ベース クラス ライブラリまたは他の Microsoft またはサードパーティによって公開 (および保護) されているリソースにアクセスするため、CAS パーミッションを作成したり、CAS パーミッションを明示的に要求したりする必要はありません。パーティーライブラリ。

于 2010-10-04T12:15:17.253 に答える