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()
之外,几乎总会有一种替代方法。可以在类装饰器中轻松地添加类属性而不是实例属性。