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 回答