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
很糟糕,并且它是程序中的安全漏洞.在这种情况下,是吗?
在这种情况下,它并不是真正的安全威胁,因为当执行的字符串是用户具有任何类型的访问权限时,就会出现安全威胁.在这种情况下,它是一个拆分字符串文字.
然而,即使它不是安全风险,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))
Run Code Online (Sandbox Code Playgroud)
一个缺陷是必须在__init__
方法中完成,所以这取决于你是否有充分的理由不在那里包含它.
归档时间: |
|
查看次数: |
179 次 |
最近记录: |