安全执行不受信任的Haskell代码
我正在寻找一种安全地运行任意Haskell代码(或拒绝运行不安全代码)的方法 必须具备:安全执行不受信任的Haskell代码,haskell,execution,isolation,sandbox,Haskell,Execution,Isolation,Sandbox,我正在寻找一种安全地运行任意Haskell代码(或拒绝运行不安全代码)的方法 必须具备: 模块/功能白名单 执行超时 内存使用限制 我希望看到的功能: 杀死线程的能力 将模块编译为本机代码 编译代码的缓存 同时运行多个口译员 编译器错误的复杂数据类型(代替字符串中的简单消息) 有了这种功能,就有可能实现一个能够运行任意Haskell代码的浏览器插件,这就是我想到的想法 编辑:我有两个答案,都很好。谢谢可悲的是,似乎没有现成的图书馆,只有一个类似的程序。不过这是一个有用的资源。无论如何,我
- 模块/功能白名单
- 执行超时
- 内存使用限制
- 杀死线程的能力
- 将模块编译为本机代码
- 编译代码的缓存
- 同时运行多个口译员
- 编译器错误的复杂数据类型(代替字符串中的简单消息)
编辑:我有两个答案,都很好。谢谢可悲的是,似乎没有现成的图书馆,只有一个类似的程序。不过这是一个有用的资源。无论如何,我想我会等待7.2.1的发布,并尝试在我自己的程序中使用SafeHaskell。我们在中已经这样做了大约8年,它支持:
- 受控命名空间
- 操作系统强制超时
- 本机代码模块
- 缓存
- 并发交互顶层
- 自定义错误消息返回
- ,一种基于ghc api的替代实现
有关编译的Haskell应用程序的动态扩展方法,请参阅Haskell中的两篇文章:
- ,及
unsafePerformIO
这样的东西是非法的),并建立了信任机制,这样就可以信任具有安全API但使用不安全功能实现的库。它完全是为运行不受信任的代码而设计的
对于其他实际方面(超时等),唐说的lambdabot将是一个很好的地方。7.2.1中将实施SafeHaskell提案的哪一部分?整件事?David Terei已经实现了SafeHaskell的编译器部分,补丁正在我的审查队列中等待。其余的是修改基本包和其他库,以便在适当的情况下使用安全可靠的库。大卫现在正在做那个部分。我预计SafeHaskell将在7.2.1中的一些实验状态下可用。我接受这个答案,因为更多的人对此进行了投票。西蒙的回答也很好。感谢您的回复!