- 比如用
eval()
执行用户自己的动态代码,用户可能会使用os.system('rm -rf /')
等恶意命令破坏服务器 - 除了用docker还有没有其他方式?(因为用户自定义动态代码需要用到当前后端项目本身的内容,所以在单独docker环境执行用户代码也不合适)
eval()
执行用户自己的动态代码,用户可能会使用os.system('rm -rf /')
等恶意命令破坏服务器15 回答8.4k 阅读
7 回答5.3k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
4 回答3.8k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
Python 的 eval 支持你传入 locals/global ,你可以通过控制全局空间里可用的对象(比如自定义
__builtin__
)来限制用户代码在eval
里能做的事情。对于比较简单的需求(比如说允许用户调几个模块,其他都不允许访问),传必要的模块进去应该够了。
对于复杂的需求,用户代码自由度比较高,但有些比较敏感的操作不允许做的话,就得自己定制下了,可以看看GitHub上开源的沙盒,比如pysandbox。