2014-02-19 100 views
0

我正在用Java servlets编写服务器应用程序,并且在某些时候,必须执行用户上传的Python脚本。是否有可能创建一个有限制的进程,比如只能访问某个目录(可能使用ProcessBuilder)?用Java执行未知的Python脚本

我已经看过了pysandbox,但是我不确定在执行未知的Python脚本时这是否足够安全。

脚本所要做的就是使用某些库处理给定的String,并使用print函数返回String。

我的方法是否正确或是否有更好的方法来执行未知脚本?

+0

没有安全措施。 什么都不会保护你。 –

回答

1

作为我的回答,白名单和黑名单目前为止只能走到尽头,而且最容易被黑客破解。不要打扰这些安全风格。

尽可能安全地使用pypy-sandbox它会创建一个操作系统级别的沙箱,并尝试隔离可能导致恶意执行的进程。

为了实际安全,您可能需要更类似于以下模型的内容。

  • 使用SELinux的作为主机火起来运行SELinux的
  • 禁用所有端口除了SSH虚拟机,并保证补丁是最新
  • 上传代码到非可执行文件目录。
  • 的chroot和的ulimit所有的事情
  • 通过pypy的沙箱
  • 执行代码破坏机器时执行完成

或者,也许我只是偏执。

+0

嗯,我认为在安全问题上有点偏执不是坏事:) 你提到的步骤是关于我在找什么,我会看看那些。我可能不会为每个用户运行一个虚拟机,因为它会更安全,但对于我的场景来说有点超载。 – user2035039