在受控条件下使用'exec'是否存在安全威胁?

时间:2012-05-12 04:38:06

标签: 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

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

2 个答案:

答案 0 :(得分:6)

在这种情况下,它并不是真正的安全威胁,因为当执行的字符串是用户具有任何类型的访问权限时,就会出现安全威胁。在这种情况下,它是一个拆分字符串文字。

但是,即使这不是安全风险,exec几乎总是一个糟糕的选择。为什么不使用getattrsetattr

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))

一个缺陷是必须在__init__方法中完成,所以这取决于你是否有充分的理由不将其包含在那里。

答案 1 :(得分:0)

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