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

Ten*_*ner 27 haskell sandbox execution isolation

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

一定有:

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

功能我看看:

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

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

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

Don*_*art 31

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

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

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

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


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


Sim*_*low 26

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

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