1

私はプラグイン システムを作成しました。プラグイン ホストは、各モジュールがどの「usings」を持っているかを知る必要があります。

主なアイデアは、プラグインがコードで使用できるものを制限して、そのセキュリティ レベルを評価することです。例: プラグインはディスクまたはネットワークを操作できないため、'usings' またはロードされた dll による制限を考えています。

プラグインの「ロードされたモジュール」を取得する方法を検索しましたが、System.IO または役立つ dll の参照が見つかりませんでした。

次に、assembly.Get***() (モジュール/フィールド/...) を調べます

多分 axemple が役立つかもしれません: Plugin 'A' EntryPoint.cs

using System.Collections.Generic; <--- is allowed
using System.IO;  <--- it is not allowed
using System.Net;  <--- it is not allowed
.... Declare a namsespace, classes and other... AND i used a streamwriter

プラグインが System.Net またはその他の禁止された参照を使用しているかどうかを知る必要があります。

ありがとう(すべての可能性に感謝します)

編集: 1) Assembly.GetReferencedAssemblies は機能しません。一部の DLL には許可された参照と禁止された参照があります

2) ディスク/ネットワーク アクセスは、このアクセスを管理する「ヘルプ ライブラリ」を使用して行うことができます。

3) サンドボックス ソリューション: 私はこれを見ましたが、主な質問は、仮想ディスクのようなものがあるということです。ユーザーがディレクトリを一覧表示するように要求すると、この操作はサーバーに「このユーザーがこのフォルダーに持っているファイルは何ですか?」と尋ねます。次に、このサーバーはデータベース内のすべてのファイルを収集し、このリストを返します。ファイルを読み書きする必要がある場合、この変更を同期する必要があります。このファイルを読み取ることができる他のすべてのコンピューターと。ネットワーク操作は、一連の「仮想パートナー」に固有のものですが、完全な VPN ソリューションはありません。

4

3 に答える 3

4

これは不可能です。usingは、別の名前空間から使用するすべてのものを完全に修飾することからあなたを救うための単なる構文ヘルパーです。

制限された権限でコードを実行する場合は、信頼性が制限された別のアプリドメインにコードを読み込むことでそれを実現できます。これが役立つかもしれない記事です。

于 2012-08-27T01:59:09.000 に答える
2

Assembly.GetReferencedAssembliesは、アセンブリの依存関係を提供します。

于 2012-08-27T01:44:54.280 に答える
1

System.Addins名前空間を見てください。これにより、部分的に信頼された環境でプラグインを安全に列挙してロードできます。

このSOの質問への回答、特にプラグインの強力な命名も役立つ場合があります。

于 2012-08-27T01:52:25.497 に答える