dllを動的にロードできるC#でアプリケーションを開発しています。これらのdllは、私の「アプリ」を表しています。これらのアプリの権限を制限したいと思います。たとえば(私の主な問題の1つ)、ディスクへのアクセスを妨げます。私のアプリはメインのアプリドメインの機能とインスタンスを使用しているため、それらを個別のサンドボックス化されたアプリドメインで実行したくありません。
とにかくこれは可能ですか?
dllを動的にロードできるC#でアプリケーションを開発しています。これらのdllは、私の「アプリ」を表しています。これらのアプリの権限を制限したいと思います。たとえば(私の主な問題の1つ)、ディスクへのアクセスを妨げます。私のアプリはメインのアプリドメインの機能とインスタンスを使用しているため、それらを個別のサンドボックス化されたアプリドメインで実行したくありません。
とにかくこれは可能ですか?
ディスクアクセスについて言及したので、この目的のために設計された.Netのコードアクセスセキュリティの使用を検討してください。
さまざまなシステムリソースにアクセスする権利を表すアクセス許可とアクセス許可セットを定義します。
ドキュメントを複製せずに、アプリケーションのコードがプラグインのコードを呼び出す可能性があるとだけ言っておきますが、新しいスレッドの開始やディスクへのアクセスなどの特定の操作を制限します。
アクセスを制限できるリソースの一部を次に示します。
すべてを実装する方法は確かにわかりませんが、インターフェイスIPermissionが必要なようです。ここで、役立つ可能性のある別の回答をSOに見つけました。
許可を得て移動する方向がわかりません。「アプリ」がメインアプリケーションに必要なものを通知する場合(Androidアプリが電話へのアクセス許可を通知する方法とほぼ同じ)IAccessRights
、各モジュールが実装するインターフェイスを定義し、必要なアクセスレベルまたは持つことができるアクセスレベルを定義できます。
public interface IAccessRights
{
Bool CanReadFromDisk { get; }
Bool CanWriteToDisk { get; };
Bool CanAccessNetwork { get; }
}
次に、モジュールがインターフェースのクラスを実装し、ロード時にオブジェクトをチェックし、それに応じてアクセス許可を調整します。双方向である必要がある場合は、メインアプリケーションがモジュールへの権限を設定(許可)できるようにするパターンを作成します。
補足:それ以外はFile.Delete
、システム自体(フックなど)に深く入り込むことなく、直接呼び出しを禁止する方法はわかりません。