如何允许DLL仅在DLL所在的目录中创建/读取/更新/删除文件

时间:2013-02-23 17:46:36

标签: c# dll sandbox

我有几个文件夹,每个文件夹都包含一些.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");
}

1 个答案:

答案 0 :(得分:2)

.NET内置了security features来完成您想要做的事情。您需要做的是apply a security context to the DLL's AppDomain and restrict what it can access

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

如果DLL可以被修改,所以它不再需要写入它自己的文件夹可以通过要求它们读取和写入Isolated Storage来使自己更容易,那么DLL的加载位置无关紧要来自,如果在DLL的同一文件夹中碰巧有其他敏感文件。


要考虑的一件事是,最好不要给予DLL任何权限,只授予它你想要做的事情,因为它可能会有其它东西来限制你的限制。例如:FileIOPermission将不会停止呼叫,如果他们P \在Windows中调用FileOpen API而不是通过.NET的Stream对象。