5

アセンブリが特定のクラスを参照しているかどうかを判断できるかどうかに興味があります。現在、リフレクションを使用してアセンブリをロードしてから、ロードしているアセンブリ内からどのアセンブリが参照されているかを判断します。

foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies())

どのアセンブリが参照されているかがわかったので、それらの vReferencedAssembly を掘り下げて、次のようなことが発生するかどうかを判断したいと思います。

File.Create(vSomeFile);

簡単に言えば、脅威と見なされるものが含まれている可能性のある、提供されたリストからアセンブリをロードしたくありません。そのため、ファイルなどを操作する可能性のあるものをブロックしたい場合があります。

4

1 に答える 1

2

あなたが探しているのは、アセンブリをリフレクションのみのコンテキストにロードすることだと思います。これにより、検査が完了するまでコードが実行されない安全な領域にそれらをロードできます。

参照: http: //msdn.microsoft.com/en-us/library/ms172331.aspx

更新:リフレクションを使用して、変数、プロパティ、パラメーター、リターンタイプなどを調べることができますが、それでもメソッド内に完全に含まれている悪意のあるコードを検出するのには役立ちません。安全なコードと安全でないコードの区別は、システム管理者に任せるのが最善であると私は理解しています。これらのアプリケーションは、PC上の保護された場所と暗黙の信頼関係を持っています。IE:グローバルアセンブリキャッシュ、現在の作業ディレクトリ、またはアプリケーションによって決定された固定パス。PCは、管理者にこの場所のアセンブリを管理する機能のみを付与します。

更新2:この潜在的に危険なコードを独自のアプリケーションドメインで実行することを検討することもできます。ここでは、許可されるものと許可されないものを設定できます。http://msdn.microsoft.com/en-us/library/bb763046.aspxを参照してください。

更新3:適切な権限を持つ独自のアプリケーションドメインに信頼できないコードをロードするのが最もクリーンなアプローチであると私は主張していますが、この質問で尋ねられたように、実行時にメソッドが内部的に参照するものを判別することは可能です。その要点は、リフレクションを使用してメソッドの生のILバイト(MethodBody.GetILAsByteArray)を取得し、選択したILパーサーで分析することです。

于 2012-06-19T19:35:14.230 に答える