python - 保护导入的模块不被第三方代码破坏

标签 python

如果我的代码使用了不可信的第三方模块,有什么办法可以防止这种情况发生:

UntrustedModule.py:

import random

random.random = lambda : 4

我的模块.py:

import random
import UntrustedModule

print (random.random())

仅导入此模块会破坏对其他不相关模块的假设吗?

最佳答案

不,您不能在 Python 中获得任何此类保证,至少在 CPython 实现中不能。当您导入一个模块时,它的代码就会运行,并且它可以完全访问解释器的每个部分(可能还有您系统的大部分)。没有办法避免这种情况。加载不受信任的代码是不明智的,因为它可以做的事情太多了。

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


PyPy 实现了一些 sandboxing features .它不像“打开沙盒”那么简单,但它是隔离不受信任代码的众多方法之一。

关于python - 保护导入的模块不被第三方代码破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15385407/

相关文章:

python - CodeBuild 仍在通过测试阶段

python - 在列表中搜索一对整数的算法

python - 如何找到集合 A 的所有子集组?在 Python 中设置分区

python - 仅在特定索引处添加 pandas 列的值

python - 什么是胶水语言?

python - 使用 cv2.resize 后获取旋转矩形的大小和位置

python - 使用 run_until_complete 运行时重试不起作用

整数的Python正则表达式?

python - 返回字符串中单词的字典长度

python - 带有 for 循环的嵌套字符串列表