1

我有几个文件夹,每个文件夹都包含一些 .DLL 文件。DLL 可以执行,我必须禁止该 DLL 在其自己的文件夹之外执行 CRUD 操作。

但是 DLL 可以执行它需要的任何保存操作,只要它位于 DLL 所在的同一文件夹中。

例如:

//这段代码可以成功执行

public static void Create()
{
 string path = Directory.GetCurrentDirectory() + "\\file.txt";
 File.Create(path);
}

//但是我必须禁止执行这段代码

public static void Create()
{
File.Create("../file.txt");
}
4

1 回答 1

2

.NET 具有内置的安全功能,可以完全按照您的意愿进行操作。您需要做的是将安全上下文应用到 DLL 的 AppDomain 并限制它可以访问的内容

做你想做的事情,我最感兴趣的可能是 FileIOPermission. 它将允许您限制 DLL 仅访问加载 DLL 的文件夹。如果您有多个 DLL,您可能需要创建多个 AppDomain 或允许所有 DLL 访问彼此的文件夹(但不能访问系统上的任何其他位置)。

如果可以修改 DLL,使其不再需要写入自己的文件夹,则可以通过要求他们读取和写入独立存储来使您自己更轻松,那么无论从哪里加载 DLL 都无关紧要,以防万一发生是与 DLL 位于同一文件夹中的其他敏感文件。


要考虑的一件事是,最好完全不授予 DLL 权限,只授予它您想要做的事情,因为它可能会使用其他事情来绕过您的限制。例如:如果他们在 Windows 中 P\Invoke 对 API 的调用而不是通过 .NET 的对象,FileIOPermission则不会停止调用。FileOpenStream

于 2013-02-23T19:59:06.037 回答