保护导入的模块不被第三方代码损坏

Kim*_*uss 7 python

如果我的代码使用了不可信任的第三方模块,那么有什么可以阻止这样的情况:

UntrustedModule.py:

import random

random.random = lambda : 4
Run Code Online (Sandbox Code Playgroud)

MyModule.py:

import random
import UntrustedModule

print (random.random())
Run Code Online (Sandbox Code Playgroud)

只是导入这个模块打破了其他不相关的假设?

Dav*_* R. 5

不,你不能在Python中有这样的保证,至少在CPython实现中没有.导入模块时,会运行其代码,并且它可以完全访问解释器的每个部分(可能是系统的大部分).没办法避免这种情况.加载不受信任的代码是不明智的,因为它可以做很多事情.

但是,您可能有兴趣在隔离的过程中运行该过程,并且只能通过IPC与其进行通信.这是一个很大的主题,它取决于您需要的隔离程度以及您对外部代码的信任程度.


PyPy实现了一些沙盒功能.它并不像"打开沙盒"那么简单,但它是隔离不受信任代码的众多方法之一.