我收到 Sonar 报告的以下违规行为:可能通过返回对可变对象的引用来公开内部表示。
这是因为我从 getter 返回一个 String[]。
我知道问题是什么以及如何解决它,但是通过 stackoverflow 上的几个线程,我注意到 String[] 和 Dates 似乎会发生这种情况:
但是考虑到发生这种情况的原因,即返回对其内部状态可以由调用者更改的对象的引用。难道不应该为每个返回可变对象的 getter 引发这种违规吗?
例如:
public List<String> getList() { return list; }
public Foo getFoo() { return foo; } //where foo is just a random object with getters and setters...
调用者可以更改返回对象的状态。 Sonar 不应该报告同样的情况吗?
非常感谢, 弗朗西斯科。
最佳答案
Sonar 不够聪明,无法知道对象是否可变。特别是如果您返回一个 List
,它无法判断您实际返回的是 ArrayList
、ImmutableList
还是一个不可修改的列表。因此它不会发出任何警告,以避免误报淹没您。
另一方面,数组和日期是众所周知的可变标准类,并且可以安全地发出此警告。
关于java - 恶意代码漏洞 - 可能通过返回对可变对象的引用来暴露内部表示 - 使用哪些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961137/