如题, 标题里所谓“安全地”指的是在载入阶段不运行任何用户级代码,只做单纯的载入。
比如我们写包的时候经常会把除了 class 和 def 外的其他部分,用if __name__ == '__main__':
包裹起来,做的就是这种工作。让我们只是单纯地执行 import,而后续的工作可以在 import 后根据已经导入的实际情况分析判断之后再做决定。。
这个问题可能面对的情况有两种,其一是我设计框架开放了一个插槽,允许用户插入自定义脚本。那么我希望在导入阶段并不会直接开始“因为某些用户书写脚本的疏漏”,而直接开始运行某几句代码,以避免发生任何不可控的问题。
另一个情况比如说我们从网上下载开源库,虽然 pypi 不像 npm 那样发展到遍地病毒的程度,但是毕竟也允许上传自定义二进制文件。。。所以出于安全考量我们希望只是单纯地引入 class 和 function,不执行任何一句代码。
====================
总之,有比较优雅的方式实现吗?
==================== 我能想到的比较丑陋的办法就是自己实现一个简单的解释器,读入库文本进行预 parsing,但是怎么想都感觉很蛋疼。
1
Trim21 2020-02-12 07:19:17 +08:00 via Android
然后别人在类的定义内部下毒,你这办法还是绕不过去
|
2
crella 2020-02-12 07:43:48 +08:00 via Android
这个好像还真没什么办法
|
3
Cbdy 2020-02-12 08:00:49 +08:00
没有办法,全靠自觉
|
4
phy25 2020-02-12 08:49:53 +08:00 via Android
|