gpt4 book ai didi

java - 为什么公共(public)静态最终数组是一个安全漏洞?

转载 作者:IT老高 更新时间:2023-10-28 20:48:50 25 4
gpt4 key购买 nike

有效的 java 说:

// Potential security hole!

static public final Thing[] VALUES = { ... };

谁能告诉我安全漏洞是什么?

最佳答案

声明 static final public 字段通常是类常量的标志。它非常适合原始类型(整数、 double 等)和不可变类,如字符串和 java.awt.Color。对于数组,问题在于即使数组引用是常量,数组的元素仍然可以更改,而且由于它是一个字段,更改是不 protected 、不受控制的,而且通常是不受欢迎的。

为了解决这个问题,可以将数组字段的可见性限制为私有(private)或包私有(private),因此在查找可疑修改时需要考虑的代码体更少。或者,通常更好的是,一起取消数组并使用“列表”或其他适当的集合类型。通过使用集合,您可以控制是否允许更新,因为所有更新都通过方法。您可以通过使用 Collections.unmodifiableList() 包装您的集合来防止更新。但请注意,即使集合是不可变的,您也必须确保其中存储的类型也是不可变的,否则会再次出现对假定常量进行未经请求的更改的风险。

关于java - 为什么公共(public)静态最终数组是一个安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842169/

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