在Java中执行未知的Python脚本

在Java中执行未知的Python脚本,java,python,processbuilder,Java,Python,Processbuilder,我正在用Javaservlet编写一个服务器应用程序,在某个时候,必须执行用户上传的Python脚本。是否可以创建一个有限制的进程,比如只能访问某个目录(可能使用ProcessBuilder) 我已经看过pysandbox,但我不确定在执行未知的Python脚本时,仅此一项是否足够安全 脚本所要做的就是使用特定库处理给定字符串,并使用print函数返回字符串 我的方法正确吗?还是有更好的方法来执行未知脚本?作为对我答案的展望,白名单和黑名单只走了这么远,并且很容易被最坚定的黑客打破。不要为这些类

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

我已经看过pysandbox,但我不确定在执行未知的Python脚本时,仅此一项是否足够安全

脚本所要做的就是使用特定库处理给定字符串,并使用print函数返回字符串


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

作为对我答案的展望,白名单和黑名单只走了这么远,并且很容易被最坚定的黑客打破。不要为这些类型的安全性操心

您将得到的最安全的方法是使用它创建操作系统级沙盒,并尝试隔离可能导致恶劣执行的进程

为了实现真正的安全性,您可能需要类似以下模型的东西

  • 使用SELinux作为主机启动运行SELinux的虚拟机
  • 禁用除SSH之外的所有端口,并确保修补程序是最新的
  • 将代码上载到不可执行目录
  • Chroot和ulimit所有的东西
  • 通过pypy沙盒执行代码
  • 执行完成后销毁机器

或者我只是多疑。

没有安全措施。没有什么可以保护你。嗯,我认为在安全问题上有点偏执并不是一件坏事:)你提到的步骤是关于我正在寻找的,我会看看这些。我可能不会为每个用户运行虚拟机,因为这样会更安全,但对于我的场景来说有点过载。