如何阻止对本地文件系统的访问

本文关键字:文件系统 访问 何阻止 | 更新日期: 2023-09-27 18:18:25

我有一种情况,我的(c#)应用程序可以加载外部dll(不是我编写的)并执行这些库中的代码。这些库可以是c#或CPP。

我需要确保这个外部代码不会访问我本地文件系统中的任何文件(读取和写入),除非来自特定文件夹。

我该怎么做呢?

如何阻止对本地文件系统的访问

我见过第三方代码这样做;例如,Jint允许您编写JavaScript脚本来操作CLR对象,但是它通过使用权限阻止任何JavaScript源代码路径访问文件系统、反射等。

您可以阅读Jint的文档并浏览其源代码以获得更多细节,但其本质似乎是这样的:

PermissionSet myPermissionSet = new PermissionSet(PermissionState.None);
// or some other permission set, depending on your requirements
try {
    myPermissionSet.PermitOnly();
    // run untrusted code
} finally {
    CodeAccessSecurity.RevertPermitOnly();
}

我读到的很多东西都说你需要创建一个沙盒Appdomain(这是我从未成功过的),但Jint的方法似乎非常有效。不过,您可能必须注意第三方代码钩住稍后会触发的静态事件——这样它们就可以逃离PermitOnly作用域。

以受限用户帐户运行应用程序,并仅授予该用户访问该特定文件夹的权限。

通过操作系统设施(文件系统privs)保护文件,创建一个只能访问这些文件的帐户,并使用该帐户运行应用程序

这取决于你的框架,但你可以使用Caspol(代码访问安全策略)直到。net 3.5(我认为 c++ dll也可以)来指定包括IO访问在内的安全特权。

希望有帮助

看看Molebox,也许它能满足你的需求。Molebox允许您将模块包装为沙盒。