在python exec范围内隔离chdir的状态更改



使用exec运行脚本;备份";python完整地处理全局状态,然后恢复它?

代码示例:

import os
print(os.getcwd())
a = 8
print(a)
exec_scope = {}
exec("""
import os
os.chdir('../new place')
a = 9
print(a)
""", exec_scope)
print(os.getcwd())
print(a)

输出:

C:original place
8
9
C:new place
8

目标是通过备份当前状态并撤消在执行外部(但安全(脚本期间可能合法发生的任何更改,在不产生任何全局副作用的情况下执行非恶意代码。

这个问题之所以有所改变,是因为最初的措辞将被解释为有必要防范恶意代码,而这不是重点。我们的假设是,外部代码是完全安全的,没有恶意,但可能会出于正当原因影响流程的全局状态,这种影响被认为是不可取的。

因此,这个问题的目标是找到最简单/最快/最简单的方法来撤消对全局状态的任何可以撤消的更改。

目标是安全地执行

是的,不,这不会发生。

您可以生成(或fork()(一个子进程,该子进程运行exec()'d代码,但它只会将您与某些状态更改隔离开来,而不会使代码失控,例如破坏您的文件系统。

注意,您不能在任何任意代码上安全地使用exec();你能做的最好的事情就是预先解析代码,看看是否有";"不安全";在那里构建,要么否认运行它们,要么完全取消它们(当然希望你已经考虑到了一切(。

最新更新