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

时间:2011-05-12 03:16:14

标签: haskell execution isolation sandbox

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

必须:

  • 模块/功能白名单
  • 执行超时
  • 内存使用限制

喜欢的功能:

  • 杀死线程的能力
  • 将模块编译为本机代码
  • 编译代码的缓存
  • 同时运行几个解释器
  • 编译器错误的复杂数据类型(在String中插入简单消息)

使用这种功能,可以实现一个能够运行任意Haskell代码的浏览器插件,这是我想到的。

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

2 个答案:

答案 0 :(得分:31)

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

  • 受控名称空间
  • 操作系统强制执行超时
  • 本机代码模块
  • 缓存
  • 并发交互式顶级
  • 返回自定义错误消息。

记录了这一系列规则,请参阅:

lambdabot采用的安全方法启发了Safe Haskell语言扩展工作。


对于动态扩展已编译的Haskell应用程序的方法,在Haskell中,请参阅两篇论文:

答案 1 :(得分:26)

GHC 7.2.1可能会有一个名为SafeHaskell的新设施,它涵盖了你想要的一些内容。 SafeHaskell确保类型安全(因此unsafePerformIO之类的内容被禁止),并建立信任机制,因此可以信任具有安全API但使用不安全功能实现的库。它专为运行不受信任的代码而设计。

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