[英]Is it safe to use Python's eval() in a unit-test for __repr__?
eval()
被称为evil 、 dangerous 、 bad practice等等。
尽管我倾向于避免使用eval()
,但我现在很想在__repr__
的自定义实现的单元测试中使用它(如此处所讨论的那样)。
基于__repr__
的文档:
... 如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的 object(给定适当的环境)。 ...
(尽管对于这是否非常有用意见不一)
我很想按如下方式测试MyClass.__repr__
:
assert eval(repr(my_class_instance)) == my_class_instance
(假设MyClass.__eq__
测试平等,而不是身份, 见下面的评论)
这让我想到了我的问题:
假设我们使用“在线”测试运行器,对于 CI/CD,这种eval()
的使用会带来任何安全风险吗?
我不认为它会,因为eval()
的输入是已知和可信的,但我不是安全专家......
据说eval
是邪恶的,因为当你评估用户提供的字符串时,你隐含地允许他们执行任意代码。
在这里,您使用的是硬编码字符串。 为了能够执行任意代码,攻击者必须修改测试代码或__repr__
代码。 无论哪种情况,这都意味着他们已经有可能执行任意代码,而不管您是否使用eval
。
所以我认为在这里使用eval
没有安全问题。 至多,您可以为未来的读者添加一条评论,说明您已经检查了该用法并确定它不会增加安全风险。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.