java - 恶意代码漏洞 - 可能通过返回对可变对象的引用来暴露内部表示 - 使用哪些对象?

标签 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...

调用者可以更改返回对象的状态。 Sonar 不应该报告同样的情况吗?

非常感谢, 弗朗西斯科。

最佳答案

Sonar 不够聪明,无法知道对象是否可变。特别是如果您返回一个 List,它无法判断您实际返回的是 ArrayListImmutableList 还是一个不可修改的列表。因此它不会发出任何警告,以避免误报淹没您。

另一方面,数组和日期是众所周知的可变标准类,并且可以安全地发出此警告。

关于java - 恶意代码漏洞 - 可能通过返回对可变对象的引用来暴露内部表示 - 使用哪些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961137/

相关文章:

sonarqube - 在 Travis CI 上使用 Sonarcloud 时出现授权错误

java - 是否有列出项目使用的所有库的 Sonar Web 服务 API?

java - java中单引号和双引号的区别?

java - 异步迭代器

java - Maven sonarqube 插件是否读取故障安全报告?

java - Sonarqube - 为什么 java 生成的代码行没有被填充?

proxy - SonarQube 代理配置,棘手

java - volatile 和 synchronized 在一起

java - 如何根据 Applet 中的条件显示不同的 JLabel

java - 从 C 而不是 Java 管理 Android 应用程序设置?