gpt4 book ai didi

java - PMD 的 ArrayIsStoredDirectly 规则背后的推理

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:29 25 4
gpt4 key购买 nike

PMD 在 Sun Security 规则集中有一个名为 ArrayIsStoredDirectly 的规则:

Constructors and methods receiving arrays should clone objects and store the copy. This prevents that future changes from the user affect the internal functionality.

这是他们的例子:

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;
}
}

我不认为我完全理解这条规则背后的原因。是因为传递的数组中的值可以在其他地方更改吗?就此而言,传递集合与传递数组之间有区别吗?

最佳答案

问题在于调用者可能会保留它传递的数组参数的副本,然后可以更改其内容。如果该对象是安全关键的并且调用是由不受信任的代码进行的,那么您就有了安全漏洞。

在这种情况下,传递一个集合并保存它而不复制它也将是一个潜在的安全风险。 (我不知道是否有PMD规则告诉你这个。)

在这两种情况下,解决风险(如果确实存在)的方法是将属性设置为参数数组或集合的副本。另一方面,如果您知道调用者始终是受信任的代码,那么复制就是浪费时间,更好的解决方案是告诉 PMD 对那个特定方法保持沉默。

关于java - PMD 的 ArrayIsStoredDirectly 规则背后的推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3315598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com