我的情况是我的(C#)应用程序可以加载外部DLL(不是由我编写)并从这些库执行代码。库可以是C#或CPP。
我需要确保此外部代码不会访问本地文件系统中的任何文件(读取和写入),但从特定文件夹除外。
我该怎么做?
答案 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允许您将模块包装到沙盒中。