安全执行不受信任的Haskell代码

安全执行不受信任的Haskell代码,haskell,execution,isolation,sandbox,Haskell,Execution,Isolation,Sandbox,我正在寻找一种安全地运行任意Haskell代码(或拒绝运行不安全代码)的方法 必须具备: 模块/功能白名单 执行超时 内存使用限制 我希望看到的功能: 杀死线程的能力 将模块编译为本机代码 编译代码的缓存 同时运行多个口译员 编译器错误的复杂数据类型(代替字符串中的简单消息) 有了这种功能,就有可能实现一个能够运行任意Haskell代码的浏览器插件,这就是我想到的想法 编辑:我有两个答案,都很好。谢谢可悲的是,似乎没有现成的图书馆,只有一个类似的程序。不过这是一个有用的资源。无论如何,我

我正在寻找一种安全地运行任意Haskell代码(或拒绝运行不安全代码)的方法

必须具备:

  • 模块/功能白名单
  • 执行超时
  • 内存使用限制
我希望看到的功能:

  • 杀死线程的能力
  • 将模块编译为本机代码
  • 编译代码的缓存
  • 同时运行多个口译员
  • 编译器错误的复杂数据类型(代替字符串中的简单消息)
有了这种功能,就有可能实现一个能够运行任意Haskell代码的浏览器插件,这就是我想到的想法


编辑:我有两个答案,都很好。谢谢可悲的是,似乎没有现成的图书馆,只有一个类似的程序。不过这是一个有用的资源。无论如何,我想我会等待7.2.1的发布,并尝试在我自己的程序中使用SafeHaskell。

我们在中已经这样做了大约8年,它支持:

  • 受控命名空间
  • 操作系统强制超时
  • 本机代码模块
  • 缓存
  • 并发交互顶层
  • 自定义错误消息返回
记录了这一系列规则,请参见:

  • ,一种基于ghc api的替代实现
lambdabot采用的安全方法启发了语言扩展工作


有关编译的Haskell应用程序的动态扩展方法,请参阅Haskell中的两篇文章:

  • ,及

GHC 7.2.1很可能会有一个新的设施,名为,它涵盖了您想要的部分内容。SafeHaskell确保了类型安全(因此像
unsafePerformIO
这样的东西是非法的),并建立了信任机制,这样就可以信任具有安全API但使用不安全功能实现的库。它完全是为运行不受信任的代码而设计的


对于其他实际方面(超时等),唐说的lambdabot将是一个很好的地方。

7.2.1中将实施SafeHaskell提案的哪一部分?整件事?David Terei已经实现了SafeHaskell的编译器部分,补丁正在我的审查队列中等待。其余的是修改基本包和其他库,以便在适当的情况下使用安全可靠的库。大卫现在正在做那个部分。我预计SafeHaskell将在7.2.1中的一些实验状态下可用。我接受这个答案,因为更多的人对此进行了投票。西蒙的回答也很好。感谢您的回复!