恶意代码漏洞 - 字段应受包保护

时间:2013-05-20 09:22:02

标签: java sonarqube

声纳给我的信息是:

  

恶意代码漏洞 - 字段应受包保护   静态数组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"
}

1 个答案:

答案 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" };
    }
    
  • 如果您确信(i)只有您自己的代码才能访问该课程,并且(ii)您/您的同事甚至无法考虑重新分配其中一个值,请忽略该警告。