Python,Excel,评估和主要罪过

问题描述

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

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

机制如此,用户可以将字典作为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)

该函数自然被列入白名单,因为它位于已知安全的目录中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...