限制 python 脚本访问 os 函数
Restrict python script access to os functions
我需要你的新想法,感谢任何帮助。
我正在实施一个系统,用户可以在其中上传自己的 Python 脚本并在其中一个服务器中执行它们。
我很注意安全问题。我想限制从此脚本对操作系统的任何访问。
首先,脚本使用 ast
解析器进行验证,以禁止访问许多最明显的关键字,如 exec
、import
、open
等
不过,用户可以声明对某些库的使用。其中一个重要的是 pandas
库(我还必须提供 matplotlib
、numpy
等)。我已经实现了 'proxy' 个对象,模仿模块,但只提供对有限属性集的访问。例如,我可以提供一个代理对象 json
,但不允许访问函数 loads
或 dumps
。
通过名称 os
、sys
等从任何对象获取属性的最明显尝试也是不允许的。这样,当用户尝试使用 json.os
或类似方式访问 os
模块时,我试图关闭一个漏洞。
这可以工作,但它是一个简单的盾牌。我可以审查所有模块并禁止访问大多数危险功能,但即使错过一个也可能导致潜在的损害。此外,某些模块可能会以一种棘手的方式访问,例如 pandas.tools.util.pd
将引用原始的 pandas
模块。我会花一年的时间来结束一切..
我考虑过在文件系统级别限制访问,但是脚本 运行s 在主进程中具有 eval
函数(基于 celery
)并且具有相同的权限(和同一用户)作为主进程。理论上它可以读取所有源并将它们传递给用户。
我的一个想法是 运行 脚本在一个单独的进程中使用最少的源和权限集,并通过管道传递数据 to/from。但这将需要重构大量代码并且无法保证稳定性 - 我仍然需要大量代码才能使其正常工作。
RestrictedPython就是你所需要的。
我需要你的新想法,感谢任何帮助。
我正在实施一个系统,用户可以在其中上传自己的 Python 脚本并在其中一个服务器中执行它们。
我很注意安全问题。我想限制从此脚本对操作系统的任何访问。
首先,脚本使用 ast
解析器进行验证,以禁止访问许多最明显的关键字,如 exec
、import
、open
等
不过,用户可以声明对某些库的使用。其中一个重要的是 pandas
库(我还必须提供 matplotlib
、numpy
等)。我已经实现了 'proxy' 个对象,模仿模块,但只提供对有限属性集的访问。例如,我可以提供一个代理对象 json
,但不允许访问函数 loads
或 dumps
。
通过名称 os
、sys
等从任何对象获取属性的最明显尝试也是不允许的。这样,当用户尝试使用 json.os
或类似方式访问 os
模块时,我试图关闭一个漏洞。
这可以工作,但它是一个简单的盾牌。我可以审查所有模块并禁止访问大多数危险功能,但即使错过一个也可能导致潜在的损害。此外,某些模块可能会以一种棘手的方式访问,例如 pandas.tools.util.pd
将引用原始的 pandas
模块。我会花一年的时间来结束一切..
我考虑过在文件系统级别限制访问,但是脚本 运行s 在主进程中具有 eval
函数(基于 celery
)并且具有相同的权限(和同一用户)作为主进程。理论上它可以读取所有源并将它们传递给用户。
我的一个想法是 运行 脚本在一个单独的进程中使用最少的源和权限集,并通过管道传递数据 to/from。但这将需要重构大量代码并且无法保证稳定性 - 我仍然需要大量代码才能使其正常工作。
RestrictedPython就是你所需要的。