DifySandbox
的HTTP
服务入口,另一个是动态链接库
的入口,在Sandbox尝试运行代码时,它会首先生产一个临时代码文件,在这个文件的最开始,会调用动态链接库
来初始化运行环境,也就是Sandbox
,随后才是用户代码的执行,最终执行代码时并不会直接执行用户提交的代码,而是执行这个临时文件,从而确保不会被用户提交的代码破坏系统。
其中,动态链接库中就是使用了Seccomp
来限制系统调用,其中运行的系统调用位于static
目录下的nodejs_syscall
和python_syscall
文件中,并分别提供了ARM64
和AMD64
两种架构的系统调用白名单,一共四份文件,在没有特殊需求的情况下,请不要随意修改这些文件。
Typo
、Bug
等问题,欢迎直接提交PR
,如果是较大的改动或Feature
级别的提交,请先提交Issue
,以便我们更好地讨论。
Python
和Nodejs
,如果你有兴趣,可以尝试添加新的编程语言支持。ARM64
和AMD64
两种架构,并提供CI
测试,以便我们能确保新增语言的安全性。Python
的依赖支持,可以在Sandbox
初始化时自动安装Python
依赖,但对于Nodejs
,由于其node_modules
的复杂性,我们目前还没有找到一个很好的解决方案,如果你有兴趣,可以尝试解决这个问题。Sandbox
支持处理图片也是一个很有意义的事情。Pillow
等库的支持,并支持在Dify
中传入图片到Sandbox
中进行处理。CI
测试:
CI
测试还不够完善,只有一些简单的用例。Sandbox
生成多模态数据,比如文本和图片的组合数据。