Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 如何避免exec()的安全风险_Python 3.x_Exec_Dynamic Variables - Fatal编程技术网

Python 3.x 如何避免exec()的安全风险

Python 3.x 如何避免exec()的安全风险,python-3.x,exec,dynamic-variables,Python 3.x,Exec,Dynamic Variables,我正在做一个测试web服务项目,需要在其中创建一些动态变量。要实现这一点,我别无选择,只能使用exec()函数,如follow for parameter in parameter_names: if parameter["type"] == "number": exec("%s= %s(request.args.get('%s'))"%(parameter["name"],"float",parameter["name"]))

我正在做一个测试web服务项目,需要在其中创建一些动态变量。要实现这一点,我别无选择,只能使用exec()函数,如follow

    for parameter in parameter_names:
        if parameter["type"] == "number":
            exec("%s= %s(request.args.get('%s'))"%(parameter["name"],"float",parameter["name"]))
            para_collection[parameter["name"]] = eval(parameter["name"])
        else:
            exec("%s= %s(request.args.get('%s'))"%(parameter["name"],"str",parameter["name"]))
            para_collection[parameter["name"]] = eval(parameter["name"])
在这里,我接受来自web调用的值并将它们分配给动态变量名。尽管这段代码给出了预期的结果,但我看到了StackOverflow帖子的数量,提到了exec()函数的安全风险。因此,我想评估这段代码的安全性

我需要测试哪些场景?
如果不是exec(),还有什么选择?

您需要验证
参数[“name”]
是否安全。最好的方法是将允许用户提供的一组值列为白名单。实际上,攻击者可以对您的代码执行各种各样的危险操作,尤其是远程代码执行

示例:攻击者为
参数[“name”]
发送
import os\nos.system(“rm-rf*”)
(假设Linux操作系统,但攻击可适用于其他操作系统)。哎哟,你丢失了很多数据

更一般地说,当前的实现允许攻击者创建一个web shell或反向shell,使他能够像在本地一样在服务器上执行任何操作

您的
参数[“name”]
可以采用什么格式?如果只是字母数字,则验证可以是一个正则表达式,用于检查值是否与字母数字模式匹配。如果不是,则向用户返回400错误。如果有效,则允许命令继续


请参阅指南:。

您需要验证
参数[“name”]
是否安全。最好的方法是将允许用户提供的一组值列为白名单。实际上,攻击者可以对您的代码执行各种各样的危险操作,尤其是远程代码执行

示例:攻击者为
参数[“name”]
发送
import os\nos.system(“rm-rf*”)
(假设Linux操作系统,但攻击可适用于其他操作系统)。哎哟,你丢失了很多数据

更一般地说,当前的实现允许攻击者创建一个web shell或反向shell,使他能够像在本地一样在服务器上执行任何操作

您的
参数[“name”]
可以采用什么格式?如果只是字母数字,则验证可以是一个正则表达式,用于检查值是否与字母数字模式匹配。如果不是,则向用户返回400错误。如果有效,则允许命令继续

请参阅指南: