java - 恶意代码漏洞 - 可能通过返回对 int[] 的可变对象的引用来暴露内部表示
问题描述
我在使用 Java 语言时遇到了 Sonar 的问题,代码如下。Sonar 声明“恶意代码漏洞 - 可能通过返回对可变对象的引用来暴露内部表示”。
private int[] integerArray = {1, 2, 3, 4};
public int[] getIntegerArray()
{
return integerArray;
}
'primitive'+'[]' 的各种数组都是可变的?
如何解决这个问题,仍然返回一个int数组?
如果不是 int[],而是 String[]、StringBuilder 或 AnyObject[],该怎么办?解决方案是什么?
解决方案
这里的问题是该getIntegerArray()
方法的调用者可以更改其内容:
int[] arr = yourObject.getIntegerArray();
arr[0] = 12345;
System.out.println(yourObject.getIntegerArray()[0]); // prints 12345.
所有数组通常都是可变的——无论是原始元素还是引用元素——除了数组长度为零的特定情况。
解决方案 - 如果您需要返回一个数组 - 是在返回之前制作一个数组的副本:
return Arrays.copyOf(integerArray, integerArray.length);
此解决方案适用于任何阵列。
推荐阅读
- c# - C#,使用 lockBits 模糊图像的一部分
- java - 使用递归检查周围的单元格
- mongoose - 无法在 NestJs 中使用 MongooseModule.forFeature() 运行应用程序
- search - 所选单词周围的白色方块
- airflow - Airflow DAG 由调度程序触发两次。每周 DAG
- neo4j - 如何对 Graph 数据运行 100 条规则?
- php - 为什么 concat 函数在执行 mysql 查询的 php 代码中不起作用?
- python - python访问循环内的下一行
- javascript - 如何在选择中创建禁用选项作为占位符
- javascript - 如何使用 Set 和 react 的 useState?