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

Sun*_*rma 5 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
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*son 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))
Run Code Online (Sandbox Code Playgroud)

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

  • +1为此.几乎总有一种替代`eval()`和`exec()`. (3认同)