繁体   English   中英

在 __repr__ 的单元测试中使用 Python 的 eval() 是否安全?

[英]Is it safe to use Python's eval() in a unit-test for __repr__?

eval()被称为evildangerousbad 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM