5

何ヶ月にもわたって、C#3.5Xamlプロジェクトをオンラインでコンパイルするために使用している個人用ツールを開発しました。基本的に、私はCodeDomコンパイラでコンパイルしています。私はそれを公開することを考えていますが、問題は、このツールを使用してサーバー上で何でも行うことが非常に簡単であるということです。

サーバーを保護したい理由は、アプリをテストおよびデバッグするための[実行]ボタンがあるためです(スクリーンショットモードで)。

これにより、VMでアプリを実行しなくても、サンドボックスでアプリを実行できますか(つまり、メモリアクセス、ハードドライブアクセス、BIOSアクセスを制限できますか?)または、すべてのコードを分析するか、実行モードを「無効にする」必要がありますか?

4

1 に答える 1

4

AppDomain をスピンアップし、そこにアセンブリをロードし、制御するインターフェイスを探し、実装型をアクティブ化し、メソッドを呼び出します。100% 制御できない AppDomain バリア (例外を含む) をインスタンスが通過しないようにしてください。

外部コード AppDomain のセキュリティ ポリシーを制御することは、1 つの答えとしては少し難しいですが、MSDN でこのリンクを確認するか、「コード アクセス セキュリティ msdn」を検索して、このドメインを保護する方法の詳細を取得できます。

編集:停止できない例外があるため、それらを監視し、例外の原因となったアセンブリを何らかの方法で記録して、再度ロードしないようにすることが重要です。

また、この 2 番目の AppDomain に、すべての読み込みと実行に使用する型を挿入することを常にお勧めします。そうすれば、(アプリケーション全体をダウンさせない) 型が AppDomain の境界を越えることはありません。2 番目の AppDomain で安全でないコードを実行するメソッドを呼び出す MarshalByRefObject を拡張する型を定義すると便利であることがわかりました。メソッド パラメーターまたは戻り値の型として、境界を越えて Serializable とマークされていない封印されていない型を返すことはできません。これを達成できれば、90% 達成できます。

于 2013-03-05T02:55:55.980 に答える