危险的Python关键字?

25 投票
7 回答
3536 浏览
提问于 2025-04-16 14:54

我即将从一个不可信的来源获取一堆Python脚本。

我想确保这些代码没有任何部分会对我的系统造成伤害,也就是说:

(1) 代码不允许导入任何模块

(2) 代码不允许读取或写入任何数据,连接网络等

(每个脚本的目的是循环遍历一个列表,从给定的输入中计算一些数据,并返回计算的值)

在我执行这些代码之前,我想有一个脚本来“检查”它,确保里面没有任何可能伤害我的系统的东西。

我想到了以下方法:检查代码中是否使用了' import '这个词(这样就可以保证没有模块被导入)

然而,用户仍然可以编写代码来读取/写入文件等(比如使用open)。

那么问题来了:

(1) 我在哪里可以找到一个Python方法的“全局”列表(比如open)?

(2) 有没有什么代码可以添加到每个发送给我的脚本的顶部,使某些“全局”方法在该脚本中无效(例如,任何使用open的地方都会导致异常)?

我知道有一些Python沙箱的解决方案,但请尝试回答这个问题,因为我觉得这更符合我的需求。

编辑:假设我确保文件中没有import,并且没有可能有害的方法(如openeval等)。我可以得出结论说这个文件是安全的吗?(你能想到其他任何“危险”的方式来运行内置方法吗?)

7 个回答

3

内置函数

关键字

请注意,你需要同时查找“file”和“open”,因为这两个都可以用来打开文件。

另外,正如其他人提到的,这并不能百分之百保证能阻止那些决心插入恶意代码的人。

9

你仍然可以在不使用 eval 的情况下对 import 进行混淆:

s = '__imp'
s += 'ort__'
f = globals()['__builtins__'].__dict__[s]
** BOOM **
25

这个观点还没有被提到,但应该说一下:

你无法保证任意的Python代码是安全的。

如果不想遇到很多安全问题,使用虚拟机(VM)是个不错的选择。

撰写回答