声纳给我的信息是:
恶意代码漏洞 - 字段应受包保护 静态数组
FORMATS
。
为什么此代码被视为恶意代码?我有一个公共类来存储所有常量。
public class Constants
{
/*
all the public static final constants of primitive datatypes for which
there is no sonar warning.
*/
public static final String[] FORMATS = new String[] {
"yyyy-MM-dd HH:mm:ss.S z",
"yyyy-MM-dd HH:mm:ss.S"
}
答案 0 :(得分:16)
可能是因为另一段代码可以执行:
Constants.FORMATS[0] = "SOME GARBAGE";
并打破其余的代码。
换句话说,你的数组是常量但不是它的内容。
替代方案的例子:
public static final List<String> FORMATS = Collections.unmodifiableList(Arrays.asList("yyyy-MM-dd HH:mm:ss.S z", "yyyy-MM-dd HH:mm:ss.S"));
使它成为一种方法:
public static String[] formats() {
return new String[] { "yyyy-MM-dd HH:mm:ss.S z", "yyyy-MM-dd HH:mm:ss.S" };
}