恶意代码漏洞 - 可能通过返回对可变对象的引用来公开内部表示 - 使用什么对象?

时间:2014-04-09 11:30:53

标签: java sonarqube

我收到Sonar报告的以下违规行为:可能会通过返回对可变对象的引用来公开内部表示。

这是因为我从一个getter返回一个String []。

我知道问题是什么以及如何解决它但是通过stackoverflow上的几个线程我注意到,例如String []和Dates似乎发生了:

Malicious code vulnerability - May expose internal representation by returning reference to mutable object

Malicious code vulnerability - May expose internal representation by incorporating reference to mutable object

但是考虑到发生这种情况的原因,即返回对对象的引用,该对象的内部状态可以被调用者改变。是否应该为每个返回可变对象的getter引发违规行为?

例如:

public List<String> getList() { return list; }

public Foo getFoo() { return foo; } //where foo is just a random object with getters and setters...

调用者可以更改返回对象的状态。声纳不应该为那些报告相同吗?

非常感谢, 旧金山。

1 个答案:

答案 0 :(得分:3)

声纳不够聪明,不知道物体是否可变。特别是如果您要返回List,则无法确定您实际返回的内容是ArrayListImmutableList还是不可修改的列表。所以它不会发出任何警告,以避免误报你的误报。

另一方面,

Arrays和Date是众所周知的可变标准类,并且可以安全地发出此警告。