寻找一个锁定的脚本解释器

时间:2011-02-23 19:27:53

标签: .net security scripting interpreter sandbox

我正在寻找一个执行特定任务的.NET库。

说我的应用程序已经发送了一个程序(用某种脚本语言),我希望我的应用程序运行该脚本。那个剧本可能来自一个公开敌对的人,但无论如何我想要运行它。 (与浏览器中的JavaScript一样。)

var sc = new SecureScript("SomeFileFromAnUnknownPossiblyHostileSource.xyz");
/* Set some event handlers. */
sc.Run();

运行调用期间,脚本可以构造它自己的数据,乱用简单的数据类型,只要效果包含在它自己的世界中就可以做任何想做的事情。

如果脚本尝试OpenFile(“C:/WINDOWS/SOMETHING.EXE”),那将失败,因为我还没有注册OpenFile函数。脚本与外部世界交互的唯一方法是使用我特别注册供脚本使用的函数。通过这样做,我承担责任,脚本不能做任何坏事。当然,我可以忽略验证参数,但这不是解释器的工作。

如果一个脚本分配了太多的内存,或者占用了太多的CPU周期,那么解释器类会在一个阈值通过后调用我的事件处理程序,并让我有权阻止该脚本死机。

我对解释器更安全而不是快速感兴趣。 Javascript JIT编译器都非常好,但我听说浏览器因为我喜欢的漏洞而经常更新。

所以,有我的请求。也许这已经存在或我需要自己构建它。我更喜欢.NET / Mono库,但我对其他平台开放。

非常感谢。

1 个答案:

答案 0 :(得分:2)

换句话说,您需要 sandbox 执行您的脚本。

有一个本机.NET机制允许您这样做:AppDomain权限。

查看 How to: Run Partially Trusted Code in a Sandbox

但是,如果要实现特定于机器资源的限制(内存和CPU),那还不够。在受限制的AppDomain中运行代码并限制机器资源消耗的一种可以说是简单的方法是使用 Managed AddIn framework ,特别是其AddInProccess类(请参阅 Managing Add-Ins: Advanced Versioning and Reliable Hosting 计算机资源耗尽 部分)。