能否在一个“傻瓜式”沙箱中托管.Net DLR?

8
我希望以这样的方式托管动态语言运行时(DLR),使得运行其中任意脚本的用户不能使进程崩溃? DLR hosting spec描述了如何在单独的ApplicationDomain中托管DLR。这允许拆除并卸载脚本运行时,并通过CAS限制某些操作(例如,我可以限制文件系统访问或禁止使用反射)。
但是,是否也有其他方法,例如:
- 限制脚本使用的最大内存量? - 限制脚本创建的线程数? - 检测死锁脚本?
我认为可以使用为SQL Server开发的非托管.net托管API实现这种细粒度控制。这是正确的方向吗?是否有针对此类通用.net沙盒的开源项目?
以下是我找到的一些潜在有用的参考资料:
1个回答

3
请查看Terrarium游戏--它是一个用.NET语言构建自主生物的游戏,这些生物与它们所描述的程序集一起被传送到其他联网计算机上。游戏目标是让你的生物控制整个生态系统,通过杀死其他生物或通过战略管理食物资源来实现。据我记得,任何花费超过0.n秒“思考”或n kb内存的生物都会被删除。

非常有趣的项目。:-) 我刚刚下载了源代码,并进行了快速的审查:他们使用一个名为“asmcheck”的本地 C ++ 项目,字面上对‘creature assembly’ 进行反汇编,并检查它正在使用/访问哪些 .net 类型。他们使用硬编码黑名单来禁止一些类型,例如 System.Threading.Thread。虽然这是一个相当有趣的解决方案,但我认为这种方法不能直接应用于 DLR。 - blueling
真的吗?这有点令人惊讶。我一直以为他们使用CAS:http://en.wikipedia.org/wiki/Code_Access_Security - Rei Miyasaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接