当前位置: 首页 > 知识库问答 >
问题:

恶意代码漏洞-通过合并对可变对象的引用,可能会暴露内部表示

秦凯定
2023-03-14

我的dto类中有以下代码。

public void setBillDate(Date billDate) {
    this.billDate = billDate;
}

我在声纳中发现了一个错误,我不确定我到底做错了什么。

Malicious code vulnerability - May expose internal representation by incorporating reference to mutable object   

类是dto,方法是自动创建的setter方法。我做错了什么。如果有人能解释的话。这将是一个很大的帮助。

共有3个答案

萧辰沛
2023-03-14

而且您也没有创建传入您是参数的Date的副本。因此,如果客户端代码将更改Date对象的值,它也会影响您的类。

解决方案是创建一份Date

public setBillDate(Date billDate){
   this.billDate = new Date(billDate.getTime());
}
步胜
2023-03-14

我想知道为什么所有的解决方案都不考虑null。一个通用的空安全解决方案应该如下所示:

public void setBillDate(Date billDate) {
    this.billDate = billDate != null ? new Date(billDate.getTime()) : null;
}
罗安宁
2023-03-14

使用该setter,用户可以无意中从外部修改日期实例

考虑这个

class MyClass {

   private Date billDate;


   public void setBillDate(Date billDate) {
      this.billDate = billDate;
   }

}

现在有人可以设置它

MyClass m = new MyClass();

Date dateToBeSet = new Date();
m.setBillDate(dateToBeSet); //The actual dateToBeSet is set to m

dateToBeSet.setYear(...); 
//^^^^^^^^ Un-intentional modification to dateToBeSet, will also modify the m's billDate 

为了避免这种情况,您可能需要在设置之前深度复制

public void setBillDate(Date billDate) {
    this.billDate = new Date(billDate.getTime());
}
 类似资料:
  • 问题内容: 我的dto类中有以下代码。 我在这样的声纳中得到一个错误,我不确定在这里做错了什么。 该类是dto,该方法是自动创建的setter方法。我在这里做错了。如果有人可以解释。这将是一个很大的帮助。 问题答案: 易变 使用该setter,某人可以 无意中* 从外部修改日期实例 * 考虑一下 现在有人可以设置它 为避免这种情况,您可能需要在设置之前进行 深度复制

  • 我正面临一个问题,声纳,使用Java语言,下面的代码。声纳状态为“恶意代码漏洞——可能通过返回对可变对象的引用暴露内部表示”。 所有带有“primitive”[]的arrya都是可变的吗? 如何解决这个问题,仍然返回int数组? 如果不是int[],而是String[]、StringBuilder或AnyObject[]呢?解决方案是什么?

  • 我得到声纳报告的以下违规行为:可能通过返回对可变对象的引用来暴露内部表示。 这是因为我从getter返回字符串[]。 我知道问题是什么,以及如何解决它,但通过stackoverflow上的几个线程,我注意到字符串[]和日期似乎发生了这种情况,例如: 恶意代码漏洞-通过返回对可变对象的引用可能暴露内部表示 恶意代码漏洞-通过合并对可变对象的引用,可能会暴露内部表示 但考虑到发生这种情况的原因,即返回

  • 问题内容: 嗨,我收到了以下违规信息: 恶意代码漏洞-可能通过返回对可变对象的引用来公开内部表示 在我的代码中,我这样写 我们如何解决它。 问题答案: 当错误消息指出时,您正在返回内部状态(chkBox-很可能是对象内部状态的一部分,即使您没有显示其定义) 如果您-例如- 由于数组对象和所有Java对象一样都是通过引用传递的,因此这也将更改存储在对象内部的原始数组。 您最可能想解决的问题很简单 它

  • 我有一个方法,它将一个对象数组作为输入,并将其存储在一个实例变量中。下面是执行此操作的代码,但FindBugs报告了一个错误,称“可能通过合并对可变对象的引用来公开内部表示”。 我试着使用数组。但是,我还是得到了这个错误。 如何解决这个FindBugs问题?

  • 今天给大家聊聊咱们平时写代码的时候,最常见的String字符串代码,它的一些底层原理,以及使用不当可能引发的内存泄漏的问题,相信对于大家平时日常开发写代码会有一定的帮助。 String字符串在内存里是如何存储的? 首先呢,当我们平时在代码中写下一行String类型的代码时,大家知道这个String字符串在内存里是如何存储的吗?比如这样的一行代码:String username = “zhangsa