我想在我的 c# 应用程序中创建沙盒模式。我需要在我的自定义或用户定义的应用程序域中加载一个 dll,然后从中执行一个方法。
我需要确保应用程序无法访问任何系统资源(硬盘等)。它应该在自己的记忆中生存和死亡。
谢谢
见这篇文章。
基本上,您需要创建一个AppDomain
使用自定义的PermissionSet
... 来锁定 .NET 应用程序有权执行的操作。
有不同的方法来创建一个。
您可以使用现有代码组区域(Intranet、Internet、MyComputer 等)定义的预定义的,也可以创建自己的。
这可以通过编程方式完成,也可以使用caspol.exe
.
当您创建此辅助节点AppDomain
时,它实际上与您的应用程序“存在”在同一个 Windows 进程中……NET 只是提供了一个“隔离”层,使每个 AppDomain 保持分离。如果您极度偏执并且不信任该隔离层,那么您可以创建一个新的 Windows 进程并在该进程中运行您的 DLL ......尽管这可能有点远。
要限制AppDomain
对 Windows 资源(文件、注册表等)的访问,您可以更改 Windows 安全主体,即让它在具有较低权限的不同 Windows 帐户下运行。
可能在这里切线...但是其他一些可能会有所帮助的事情...取决于您要实现的目标...
如果您有想要尽量减少被发现的敏感信息(例如,被某人翻阅记忆),请使用SecureString
.
如果您想防止任何“代码”或“数据”被分页到磁盘(进入页面文件),那么您可以使用自定义 CLR 主机,以便将其全部保存在物理内存中。