.NET动态DLL加载和安全性

时间:2013-05-30 17:20:51

标签: c# .net security plugins

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

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

由于

2 个答案:

答案 0 :(得分:5)

  

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

没有。 MEF中没有任何与安全相关的内容。

  

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

这实际上更像是IT顾虑 - 如果用户获得对其他用户帐户的访问权限,他们将拥有与该用户相同的控制权。在你的情况下,如果Eve访问Alice的帐户,就没有办法阻止Eve做你想让Alice做的事情(即:加载一个插件)。

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

答案 1 :(得分:2)

基本上这个问题与.Net无关,包含两个问题:

  • 如何阻止用户自愿运行恶意代码? - 你没有
  • 如何阻止其他常规用户更改此用户的配置文件? - 您在每个用户可访问的位置存储每用户配置(默认用户的文件夹是完美的位置)。你不能保护盒子管理员改变任何人的配置/二进制文件。