Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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 正在使用';执行官';在受控条件下,是否存在安全威胁?_Python_Security_Exec - Fatal编程技术网

Python 正在使用';执行官';在受控条件下,是否存在安全威胁?

Python 正在使用';执行官';在受控条件下,是否存在安全威胁?,python,security,exec,Python,Security,Exec,下面是一个示例类: from datetime import datetime class Article: published = datetime.now() for propname in "year month day hour minute second".split(): exec "%s = property(lambda self: self.published.%s)"%(propname, propname) del propname

下面是一个示例类:

from datetime import datetime
class Article:
    published = datetime.now()
    for propname in "year month day hour minute second".split():
        exec "%s = property(lambda self: self.published.%s)"%(propname, propname)
    del propname

如您所见,我正在使用
exec
优化多个
property()
对象的创建。我经常读到,使用
exec
是不好的,它是程序中的一个安全漏洞。在这种情况下,是吗?

在这种情况下,它不是真正的安全威胁,因为当执行的字符串是用户可以访问的内容时,安全威胁就会出现。在本例中,它是一个拆分字符串文本

然而,即使不是安全风险,
exec
几乎总是一个糟糕的选择。为什么不使用
getattr
setattr

from datetime import datetime
class Article:
    published = datetime.now()

    def __init__(self):
        for propname in "year month day hour minute second".split():
            setattr(self, propname, getattr(self.published, propname))

一个缺陷是,这必须在
\uuuu init\uuuu
方法中完成,因此这取决于您是否有充分的理由不将其包含在其中。

使用带有可信数据的exec是可以的;但是,在这种情况下,这是不必要的,并且会减慢脚本的速度

这是+1。除了
eval()
exec()
之外,几乎总会有一种替代方法。可以在类装饰器中轻松地添加类属性而不是实例属性。