1

在 C# 中,您可以使用 Assembly.LoadFrom 轻松地动态加载给定 DLL 路径的程序集。一切都很好,适合静态路径。但是,如果您想从用户指定的路径加载怎么办?

例如,如果您有一个插件系统,并且用户在配置文件中指定了 DLL 文件的路径,您将如何防止有人通过插件系统加载恶意代码?换句话说,如果 Alice 在一个系统上运行一个软件包,该系统有一个可以指定插件 dll 的配置文件,如果 Eve 要获得访问权限,你将如何阻止 Eve 更改配置文件以指向她自己的恶意 dll爱丽丝的系统?.NET MEF 是否解决了这个问题?

谢谢

4

2 回答 2

5

.NET MEF 是否解决了这个问题?

不。MEF 中根本没有与安全相关的内容。

例如,如果您有一个插件系统,并且用户在配置文件中指定了 DLL 文件的路径,您将如何防止有人通过插件系统加载恶意代码?换句话说,如果 Alice 在一个系统上运行一个软件包,该系统有一个可以指定插件 dll 的配置文件,如果 Eve 要获得访问权限,你将如何阻止 Eve 更改配置文件以指向她自己的恶意 dll爱丽丝的系统?

这实际上更多的是 IT 关注 - 如果用户获得对另一个用户帐户的访问权限,他们将拥有与该用户相同的控制权。在您的情况下,如果 Eve 获得对 Alice 帐户的访问权限,则无法阻止 Eve 做您想让 Alice 做的事情(即:加载插件)。

在这种情况下,最好的选择是限制插件可以作为一个整体执行的操作- 这可以通过MAF处理,因为 MAF 中提供了用于隔离的选项。然而,这个框架的使用和实现要比 MEF 复杂得多。

于 2013-05-30T17:24:57.260 回答
2

本质上,这个问题与.Net无关,由两个问题组成:

  • 如何防止用户自愿运行恶意代码?- 你没有
  • 如何防止其他普通用户更改该用户的配置文件?- 您将每个用户的配置存储在每个用户可访问的位置(默认用户的文件夹是完美的位置)。您无法防止框管理员更改任何人的配置/二进制文件。
于 2013-05-30T17:24:51.050 回答