需求背景
最近在工作上, 遇到了一个比较特殊的需求:
为了安全, 设计一个函数或者装饰器, 然后用户在 "定义/调用" 函数时, 只能访问到我们允许的内置变量和全局变量
通过例子来这解释下上面的需求...我们真正想要讨论的是下面的例子:
# 装饰函数
def wrap(f):
# 调用用户传入的函数
f()
a = 123
# 用户自定义函数
def func():
import..., 而且这套规则还很大可能会误伤, 不过也可能业界已经有类似的成熟的方案, 只是我还没接触到而已....:
# 伪代码
# 装饰函数
def wrap(f):
# 调用用户传入的函数
.......,
关于代码运行原理, 其实在关键部位的代码, 都已经加了注释, 可能在exec那部分会比较迷惑, 但其实大家将对应的变量代入字符串就能懂了, 替换之后, 其实也就是函数的定义+执行, 可以通过print