java - 在Java中执行未知的Python脚本

标签 java python processbuilder

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

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

脚本所要做的就是使用某些库处理给定的字符串并使用打印函数返回一个字符串。

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

最佳答案

作为我的回答的前言,白名单和黑名单的作用仅限于此,事实证明,最坚定的黑客很容易破解它们。不要为这些安全方式而烦恼。

最安全的方法是使用 pypy-sandbox它创建一个操作系统级别的沙箱,并尝试隔离可能导致不良执行的进程。

为了真正的安全,您可能需要更像以下模型的东西。

  • 使用 SELinux 作为主机启动运行 SELinux 的虚拟机
  • 禁用除 SSH 之外的所有端口并确保补丁是最新的
  • 将代码上传到不可执行的目录。
  • Chroot 和 ulimit 所有内容
  • 通过pypy-sandbox执行代码
  • 执行完成后销毁机器

也许我只是偏执。

关于java - 在Java中执行未知的Python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21877718/

相关文章:

Python - OpenCV 模块缺少属性 CV_CALIB_FIX_INTRINSIC

java - 即使我发送的所有对象都是可序列化的,也收到 NotSerializedException

java - 我如何将参数作为通用参数传递?

Java8 时间库不能正确解释 BST 时区

java - ProcessBuilder 无法运行带有参数的 python 脚本

java - 从 Java 程序执行批处理文件时出错

Java 进程生成器 : command not found

java - 将 FileOutputStream 重定向到控制台 - Java

python - CQL 更新查询无法使用 Python

python - pyspark dataframe 将 json 列转换为新列