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