使用Erlang沙盒用户代码

时间:2012-11-03 18:06:30

标签: erlang sandbox unsafe

据我所知,Erlang提供了错误处理和进程隔离的高级功能。

我正在构建一个系统,允许用户提交他们的代码以便在共享服务器环境中执行,并且需要使其安全。

要求是:

  • 为每个用户进程单独限制CPU和内存使用量。
  • 禁止用户进程与其他进程通信(除了为此目的专门设计的某些进程)。
  • 禁止访问所有系统资源(shell,文件系统......)。
  • 在出现错误或资源消耗过高时终止用户进程。

是否可以通过Erlang实现所有这些并保持其性能效率?

2 个答案:

答案 0 :(得分:2)

通常,Erlang不提供用户可以注入的沙箱代码的方法。您可以尝试编写自己的保护代码,但这很难。

更好的选择可能是“安全的哈克尔”这样的语言:

http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/safe-haskell.html

专门用来做这种事情。

Erlang提供的隔离并非旨在防止注入恶意模块。事实上,在分布式案例中也没有这样的保护。只要连接了两台机器,就可以对另一台机器进行限制。

答案 1 :(得分:1)

过去在Safe Erlang上已经完成了一些工作,你可以找到几篇关于它的论文。 ErlHive项目以一种有趣的方式解决了这个问题。