【发布时间】:2010-07-23 05:36:37
【问题描述】:
PMD 在 Sun Security 规则集中有一个名为 ArrayIsStoredDirectly 的规则:
接收数组的构造函数和方法应该克隆对象并存储副本。这可以防止用户未来的更改影响内部功能。
这是他们的例子:
public class Foo {
private String [] x;
public void foo (String [] param) {
// Don't do this, make a copy of the array at least
this.x=param;
}
}
我认为我并不完全理解这条规则背后的原因。是因为传递的数组中的值可以在其他地方更改吗?在这方面,传递集合和传递数组有区别吗?
【问题讨论】:
-
在传递数组和集合方面没有区别。数组和集合的安全处理略有不同的是,对于数组,可以调用 .clone(),但您不应该信任 Collection 的 .clone() 方法。
标签: java security code-analysis pmd