如何防止访问本地文件系统

时间:2011-12-21 14:00:58

标签: c# security acl

我的情况是我的(C#)应用程序可以加载外部DLL(不是由我编写)并从这些库执行代码。库可以是C#或CPP。

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

我该怎么做?

5 个答案:

答案 0 :(得分:1)

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

您可以阅读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范围。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

通过操作系统工具(文件系统权限)保护文件,创建一个只能访问这些文件并使用此帐户运行应用程序的帐户

答案 3 :(得分:0)

这取决于您的框架,但您可以使用Caspol(代码访问安全策略)到.Net 3.5(以及我认为 C ++ DLL)来指定安全权限,包括IO访问。

希望有所帮助:)

答案 4 :(得分:0)

看看Molebox,也许它会满足您的需求。 Molebox允许您将模块包装到沙盒中。