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