我想以这样一种方式托管动态语言运行时 (DLR),以便在其中运行任意脚本的用户无法关闭该进程?
The DLR 托管规范 https://web.archive.org/web/20110814193317/http://dlr.codeplex.com/Project/Download/FileDownload.aspx?DownloadId=127516描述如何在单独的应用程序域中托管 DLR。这允许拆除和卸载脚本运行时并通过 CAS 限制某些操作(例如,我可以限制文件系统访问或禁止使用反射)。
但还有其他方法吗,例如:
- 限制脚本使用的最大内存量?
- 限制脚本创建的线程数量?
- 检测死锁脚本?
我认为这种细粒度的控制可以使用非托管 .net 托管 API https://learn.microsoft.com/en-us/dotnet/framework/unmanaged-api/hosting/clr-hosting-interfaces这是为 SQL Server 开发的。这是要走的方向吗?是否有针对这种通用 .net 沙箱的开源项目?
以下是我发现的一些可能有用的参考资料:
- 探索使用 .NET Framework 2.0 安全托管不受信任的加载项的技术 https://learn.microsoft.com/en-us/archive/msdn-magazine/2005/november/how-to-safely-host-untrusted-add-ins-with-the-net-framework-2-0
-
主机保护 http://dlr.codeplex.com/Thread/View.aspx?ThreadId=216441DLR 讨论列表上的话题
-
使用主机保护 https://learn.microsoft.com/en-us/archive/blogs/shawnfa/using-host-protection(.Net 安全博客)
看一下玻璃容器 https://web.archive.org/web/20171022165052/http://terrarium2.codeplex.com:80/-- 在这款游戏中,您可以使用 .NET 语言构建自己的自主小动物,并将它们连同描述它们的程序集一起传送到其他联网计算机。目标是让您的小动物接管整个生态系统,要么通过杀死其他一切,要么通过战略性地管理食物资源。
我记得,任何花费超过 0.n 秒“思考”或 n kb 内存的生物都会被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)