【问题标题】:SonarQube - May Expose Internal Representation by storing an external mutable objectSonarQube - 可能通过存储外部可变对象来公开内部表示
【发布时间】:2019-10-11 20:12:10
【问题描述】:

以下代码在通过 SonalQube 运行代码漏洞时出现错误。

public class Myclass{

String[] text;

public MyClass(String [] texts){
this.texts = texts;
}
}

以上代码抛出漏洞错误:May Expose Internal Representation by storage an external mutable object

【问题讨论】:

  • 好的;你的问题是什么?
  • 上述代码报错。需要帮助来解决这个问题。
  • 创建并存储数组的副本。否则,调用者可以通过修改它之前提供给您的数组来修改对象的内部状态(这就是警告消息告诉您的内容)。

标签: java jakarta-ee sonarqube


【解决方案1】:

正如 cmets 中已经提到的,数组在 Java 中通过引用传递(作为所有复杂对象)。 这意味着有机会将有效的 Sting[] 传递给您的类,在您检查并存储它之后,调用者将数组的内容更改为他想要的任何内容。

所以如果你想关闭这个漏洞,你需要像这样存储数组:

public class SaveArrayContainer {

public String[] data;

    public SaveArrayContainer(String[] array) {
        data = Arrays.copyOf(array, array.length);
    }
}

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2013-09-28
    • 2014-01-06
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多