当前位置: 首页 > 面试题库 >

违反声纳:安全性-阵列直接存储

全昊焜
2023-03-14
问题内容

有违反声纳的行为:

违反声纳:安全性-阵列直接存储

public void setMyArray(String[] myArray) { 
  this.myArray = myArray; 
}

解:

public void setMyArray(String[] newMyArray) { 
  if(newMyArray == null) { 
    this.myArray = new String[0]; 
  } else { 
   this.myArray = Arrays.copyOf(newMyArray, newMyArray.length); 
  } 
}

但是我想知道为什么吗?


问题答案:

它的抱怨,你存储阵列是由主叫方持有相同的数组。也就是说,如果调用者随后修改了此数组,则存储在对象中的数组(以及对象本身)将发生变化。

解决方案是在传递对象时在对象内进行复制。这称为 防御性复制 。收集的后续修改不会影响存储在所述对象内的阵列。

在返回集合时(例如在相应的getMyArray()调用中)通常也要这样做。否则,接收者可能会执行修改并影响存储的实例。

注意,这显然适用于所有可变集合(实际上是所有可变对象),而不仅仅是数组。还要注意,这会对性能产生影响,需要与其他问题一起进行评估。



 类似资料:
  • 默认情况下,Swift 会阻止你代码中发生的不安全行为。比如说,Swift 会保证在使用前就初始化,内存在变量释放后这块内存就不能再访问了,以及数组会检查越界错误。 Swift 还通过要求标记内存位置来确保代码对内存有独占访问权,以确保了同一内存多访问时不会冲突。由于 Swift 自动管理内存,大部份情况下你根本不需要考虑访问内存的事情。总之,了解一下什么情况下会潜在导致冲突是一件很重要的事情,这

  • 问题内容: 在这种情况下是否可能发生任何安全漏洞利用: str对象在哪里。该字符串是用户生成的,可能令人讨厌。假设我们的网络框架没有让我们失败,那是一个来自Python内置函数的真正诚实的str实例。 如果这样做很危险,我们可以对输入进行任何操作以使其安全吗? 我们当然 不 希望执行字符串中包含的任何东西。 对于这个问题,我认为不是必不可少的更大范围是,我们有成千上万个这样的环境: 在某些情况下嵌

  • 当我将图像上传到我的web应用程序中时,它显示以下错误 拒绝加载图像'

  • 我正在从chargebee.com加载外部脚本,并在控制台中收到此错误消息: [仅报告]拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src'nonce VVZ V0c=''self'https://maps.googleapis.com https://domain.chargebeestatic.com http://dgkxwewtzsnml.cloudfront.ne

  • 问题内容: 将Java运行时更改为1.6后,我面临oracle db连接问题。之前我们的应用程序使用1.5 Java运行时,现在我们正在迁移1.6。尝试连接到oracle 10g db时,应用程序引发以下异常: 失败了 错误:验证操作失败。错误:[ORACLE-10002:从与Oracle数据库+ ASM的连接接收到错误:java.lang.SecurityException:违反密封:封装了or

  • 我正在尝试连接Neo4j,但我一直收到这个错误。我试过了 但当我尝试连接时,会出现这个错误 SecurityError:无法建立到“EOF违反协议(_ssl.c:841)”的安全连接 我可以在打字时连接到浏览器http://localhost:7474/browser/ 以下是完整的错误日志: ----------------------------------------------------