python-3.x - 执行任意代码,但模拟一切
问题描述
exec
使用任意代码是危险的,因为该代码可能会产生不良的副作用。但是如果代码的所有调用都被模拟了,那么这个问题就消失了。问题是你需要知道代码使用了哪些函数和模块,然后一一模拟。如果我们正在处理未知代码,那么该集合可能是无限的。
有没有办法让 Python 模拟代码调用的所有内容,除了我提供的显式白名单?
例如,假设我想执行一个setup.py
文件以确定正在传递的版本,但没有实际安装任何东西。我会让一切都被嘲笑,除了open
(如果版本是从文件中提取的)。然后我可以安全地运行该文件,并且知道它除了打开文件之外不会做任何事情。