使用 Erlang 进行沙箱化用户代码

5
据我所知,Erlang提供了先进的错误处理和进程隔离功能。
我正在构建一个系统,允许用户提交他们的代码在共享服务器环境中执行,并需要使其安全。
要求如下:
- 为每个用户进程单独限制CPU和内存使用。 - 禁止用户进程与其他进程通信(除了专门设计用于此目的的一些进程)。 - 禁止访问所有系统资源(shell、文件系统等)。 - 在出现错误或高资源消耗的情况下终止用户进程。
使用Erlang能够满足这些要求并保持高效性吗?
2个回答

2
总体来说,Erlang并没有提供用于沙盒化用户可以注入的代码的手段。您可以尝试编写自己的保护代码,但这相当困难。
更好的选择可能是像“安全Haskell”这样的语言:

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

这是专门用于执行此类操作的构建的。
Erlang提供的隔离并不旨在保护免受恶意模块注入的攻击。实际上,在分布式情况下也没有这样的保护措施。只要两台机器连接在一起,就没有限制你可以对另一台机器做什么。

1

过去已经对安全Erlang进行了一些工作,您可以找到几篇相关论文。ErlHive项目以有趣的方式解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接