Python、excel、eval和大罪
好的,我知道以前在很多不同的线程中都有人问过这个问题,但我发现自己仍在努力减少我的怀疑 我有一个应用程序,允许用户传递字符串字典,并从库中“选择”后端函数来处理它。这些函数是“工作流”库的一部分,由系统管理员在后端加载。可用函数存储在后端的清单文件中 机制是用户将字典作为json发送到web应用程序,并指定库中的哪个函数应该处理它。然后通过python exec()或eval()函数加载并执行该函数 在执行之前,根据清单文件中的可用函数列表(白名单)检查请求的函数Python、excel、eval和大罪,python,security,exec,eval,Python,Security,Exec,Eval,好的,我知道以前在很多不同的线程中都有人问过这个问题,但我发现自己仍在努力减少我的怀疑 我有一个应用程序,允许用户传递字符串字典,并从库中“选择”后端函数来处理它。这些函数是“工作流”库的一部分,由系统管理员在后端加载。可用函数存储在后端的清单文件中 机制是用户将字典作为json发送到web应用程序,并指定库中的哪个函数应该处理它。然后通过python exec()或eval()函数加载并执行该函数 在执行之前,根据清单文件中的可用函数列表(白名单)检查请求的函数 我的基本问题是,白名单能使ex
我的基本问题是,白名单能使exec()和eval安全吗?它能变得“更安全”吗?如果我理解的话,该函数是管理员信任的,这使得它与您安装的任何python模块一样安全。只需确保exec部分仅在受信任的代码上完成。下面是一个示例,其中加载并执行与文件同名的函数
import json
from pathlib import Path
# files named the same as the function, no .py
FUNCTION_DIR = Path("/my/functions/are/here")
def run_func(name, data):
try:
func_namespace = {}
exec(open(FUNCTION_DIR/name).read(), func_namespace)
return func_namespace[name](json.dumps(data))
except Exception as e:
return "Hey, what kind of game are you playing here? " + str(e)
该函数自然会被列入白名单,因为它位于已知的安全目录中。谢谢,这很有意义。在我的例子中,我使用一个带有“允许”模块和函数列表的.yaml文件。更确切地说,我在跑步;exec('import'),然后eval('mydict'),在调用exec/eval之前,根据manifest.yaml测试和字符串。