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

标签 java

我的 dto 类中有以下代码。

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

我在声纳中遇到了这样的错误,我不确定我在这里做错了什么。

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

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

最佳答案

日期是可变的

使用该 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());
}

关于java - 恶意代码漏洞 - 可能通过合并对可变对象的引用来暴露内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954873/

相关文章:

java - 如何使用 Dagger 模块和 Robolectric 测试 Activity onResume() 上的模拟交互?

java - 将类(class)转换到自制类(class)

java - 为什么这个 protected 成员在子类中不可见

Java - Getter/Setter、行为和接口(interface)

java - Maven 不查看本地存储库

JavaFX 在 WebEngine 中禁用突出显示和复制模式

java - 尊重 Java/Swing 中的字体连字

java - 从一组键(所有键都具有相同的值)构建 HashMap 的惯用方法是什么

java - 在 Java 正则表达式中仅打印三位数字的量词

java - 使用可迭代到 Hashmap 的迭代器实现 - 可能吗?