Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python、excel、eval和大罪_Python_Security_Exec_Eval - Fatal编程技术网

Python、excel、eval和大罪

Python、excel、eval和大罪,python,security,exec,eval,Python,Security,Exec,Eval,好的,我知道以前在很多不同的线程中都有人问过这个问题,但我发现自己仍在努力减少我的怀疑 我有一个应用程序,允许用户传递字符串字典,并从库中“选择”后端函数来处理它。这些函数是“工作流”库的一部分,由系统管理员在后端加载。可用函数存储在后端的清单文件中 机制是用户将字典作为json发送到web应用程序,并指定库中的哪个函数应该处理它。然后通过python exec()或eval()函数加载并执行该函数 在执行之前,根据清单文件中的可用函数列表(白名单)检查请求的函数 我的基本问题是,白名单能使ex

好的,我知道以前在很多不同的线程中都有人问过这个问题,但我发现自己仍在努力减少我的怀疑

我有一个应用程序,允许用户传递字符串字典,并从库中“选择”后端函数来处理它。这些函数是“工作流”库的一部分,由系统管理员在后端加载。可用函数存储在后端的清单文件中

机制是用户将字典作为json发送到web应用程序,并指定库中的哪个函数应该处理它。然后通过python exec()或eval()函数加载并执行该函数

在执行之前,根据清单文件中的可用函数列表(白名单)检查请求的函数


我的基本问题是,白名单能使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测试和字符串。