我正在使用 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/