以下代码在通过 SonalQube 运行时出现代码漏洞错误。
public class Myclass{
String[] text;
public MyClass(String [] texts){
this.texts = texts;
}
}
上面的代码抛出漏洞错误:可能通过存储外部可变对象来暴露内部表示
最佳答案
正如评论中已经提到的,数组在 Java 中通过引用传递(与所有复杂对象一样)。 这意味着有机会将有效的 Sting[] 传递给您的类,在您检查并存储它之后,调用者将数组的内容更改为他想要的内容。
因此,如果您想消除该漏洞,您需要像这样存储数组:
public class SaveArrayContainer {
public String[] data;
public SaveArrayContainer(String[] array) {
data = Arrays.copyOf(array, array.length);
}
}
关于java - SonarQube - 可以通过存储外部可变对象来公开内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58347899/