2011-09-05 19 views
19

私のアプリケーションにアドオンを追加しようとしていますが、アドオンでリフレクションを使用したくない場合は、アプリケーションドメインを使用してアドオンコードをサンドボックスにすることができます。ReflectionPermissionを使用してリフレクションを拒否する方法

MSDNでAppdomain exampleが見つかりましたが、ReflectionPermisionの参照がなく、拒否されたセキュリティ属性も償却されています。多くの属性が償却されています。

答えて

8

AppDomain.CreateDomainを使用してサンドボックス化されたappdomainを作成するには、サンドボックス化されたアセンブリに付与するアクセス許可のみを含むPermissionSetを渡す必要があります。 ReflectionPermissionを許可しない場合は、単にアクセス許可セットに追加しないでください。

ReflectionPermissionは、一般的なソースアドインでは通常拒否される唯一の「危険な」アクセス許可からは程遠いと言われています。非常に厳格にしたい場合は、SecurityPermission \ Executionだけを許可することを検討することをお勧めします。例えば、

PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 

あなたは追加の「安全」の権限を含める場合、あなたは、単に追加AddPermission呼び出しを使用してアクセス許可セットに追加することができます。 deprcated CASポリシーシステムの下でインターネットソースコードに付与するのに十分安全であるとみなされたすべてのアクセス許可を含める場合は、インターネットゾーンの証拠をSecurityManager.GetStandardSandbox静的メソッドに渡すことによってこれらを抽出できます。例えば、

Evidence evidence = new Evidence(); 
evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); 

PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence); 

N.B.:どちらの方法も、あなたが質問したMSDN articleに記載されています。

0

文書によると、ReflectionPermissionは、プライベートメンバーと保護されたメンバーにコードアクセスを許可するものです。デフォルトではそれは許可されておらず、コードはパブリックメンバーにしかアクセスできません。パブリックメンバーを非表示にする場合は、パブリックメンバーを公開しない新しいインターフェイスを作成する必要があります。

+0

悪質なコード*がクラスから継承して保護されたメンバーにアクセスできることを忘れないでください。ただし、既存のオブジェクトの保護されたメンバーにはアクセスできません。 – svick

+4

クラスが継承されないようにするには、 'sealed'キーワードを使用します。 – DevDelivery

関連する問題