コード アクセス セキュリティに関する MCTS 70-536 トレーニング キットの第 11 章のラボを実行しています。XP Proを実行しています。最初のラボでは、さまざまなアクセス許可を確認し、存在する場合はメッセージを報告するアセンブリを作成します。ただし\\\127.0.0.1\c$\ListPermissions.exe
、イントラネットゾーンにいることを認識し、イントラネットのアクセス許可セットを使用するはずなので、実行すると。ただし、すべての権限が付与されているようです。この動作は誰にでもなじみがあるように聞こえますか? そうでない場合、共有から実行したときにアセンブリがどのゾーンにあると考えているかを確認する方法はありますか? この質問の特定の部分があいまいすぎる場合は、お知らせください。言い換えてみます。
3 に答える
.net プラットフォームに変更があったようです。マネージ exe の起動時に新しい証拠が追加されました。exe が win32 CreateProcess API から直接起動されると、マネージド exe に完全な信頼が与えられます。
もちろん、.net 構成ツールは exe を起動せず、検査するだけです。これは、エビデンスが異なり、割り当てられたコード グループに影響することを意味します。これは、権限に影響を与えます。
大変紛らわしいです。さらにややこしいのは、試験で出すべき答えです。本に書いてある通りの答えになると思います。この変更が試験コンテンツ チームに浸透したとは思えません。
詳細については、次を参照してください。
私は同じ問題を抱えていましたが、別のことを試しました。共有フォルダーや C ドライブのルートなど、さまざまな場所からプログラムを実行する代わりに、アプリケーション ドメインを作成し、さまざまなゾーン設定を使用してアプリケーション ドメインからコードを実行しました。これが私のコードです:
object[] hostEvidence = { new Zone(SecurityZone.Internet) };
Evidence appDomainEvidence = new Evidence(hostEvidence, null);
AppDomain d = AppDomain.CreateDomain("MyDomain", appDomainEvidence);
d.ExecuteAssembly("ListPermissions.exe");
私のゾーンが MyComputer に設定されている場合、例外を与えずに ListPermissions が実行され、すべての権限が true を返します。ただし、ゾーンをインターネットまたはイントラネットに設定すると、ExecuteAssembly の行で例外が発生し始め、実際に満足しました。少なくともある時点では機能します。
私の理解では、別の場所からアプリケーションを実行すると、CLR は、実行中のコードに別の証拠があり、アセンブリを mycomputer やインターネットなどの別のコード グループに割り当てていることを確認します。ただし、少なくとも私の構成ではそうではなく、別のフォーラムでは、.NET Framework 3.5 では、共有フォルダーから実行されているアセンブリには、インターネット ゾーンから実行されているアセンブリとしての正確な証拠がないと結論付けられています。 http://social.msdn.microsoft.com/Forums/en/clr/thread/5f5f0925-64fc-4fc8-9be3-d077d27d2554 私は、本に書かれているようにプログラムを実行させる正確なソリューションを実際には知りません。作成されたカスタム アプリケーション ドメインとそれを共有したいだけで、コードは想定どおりに機能します。
お役に立てれば
ありがとう
こんにちは、この例を実行したときに何が起こるかわかりませんが、.NET Framework 2.0 構成ツールでアセンブリの評価を使用すると、そのアセンブリは Internet_Zone および Internet_Same_Site_Access コード グループで実行する必要があることがわかります。これらのコード グループは、5 つの承認によって構成されるサブセットを付与します。 - UI - 分離ストレージ - 保護 - IO ダイアログ - 印刷
構成ツールでは問題ないようですが、アセンブリの動作はまったく異なります...わかりません:(
マルコ