Wil*_*leu 9 java security code-analysis pmd
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为我完全理解这条规则背后的原因.是因为传递的数组中的值可以在其他地方更改吗?传递Collection与传递数组有什么不同?
Ste*_*n C 12
问题是调用者可能会保留它传递的数组参数的副本,然后可以更改其内容.如果对象是安全关键的,并且调用是由不受信任的代码进行的,那么您就有了安全漏洞.
在这种情况下,传递集合并保存它而不复制它也是一种潜在的安全风险.(我不知道是否有PMD规则告诉你这个.)
在这两种情况下,解决风险的方法(如果是真的)是将属性设置为参数数组或集合的副本.另一方面,如果您知道调用者始终是可信代码,那么副本是浪费时间,更好的解决方案是告诉PMD对该特定方法保持沉默.
归档时间: |
|
查看次数: |
8913 次 |
最近记录: |