2013-05-20 3 views
3

수중 음파 탐지기 나에게 메시지를주고 보호 :악성 코드 취약점이 필드를해야 패키지는

악성 코드 취약점을 - 필드 정적 배열 FORMATS에 대한 보호 패키지해야합니다.

이 코드가 악의적으로 간주되는 이유는 무엇입니까? 모든 상수를 저장할 공용 클래스가 있습니다.

Constants.FORMATS[0] = "SOME GARBAGE"; 

을 그리고 코드의 나머지 부분을 깰 :

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

답변

13

아마 코드의 또 다른 조각은 실행할 수 있기 때문이다.

즉 배열의 내용은 일정하지만 내용은 아닙니다. 대안의

예 :

public static String[] formats() { 
    return new String[] { "yyyy-MM-dd HH:mm:ss.S z", "yyyy-MM-dd HH:mm:ss.S" }; 
} 
: 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"));
  • 이 그것을하는 방법을 : 당신이 일정한 별도의 문자열로 각 형식을 저장할 수 있습니다

    • 대신 불변의리스트를 사용할 수 있습니다
    • (i) 자신의 코드 만 해당 클래스에 액세스하고 (ii) 귀하/귀하의 공동체가 존재하지 않는다고 확신하는 경우 경고를 무시하십시오. lleagues는 심지어 값 중 하나를 재 할당하는 것을 고려할 것입니다.
  • +0

    그래서 final은 FORMATS = new String [] { "a", "b"}와 같은 재 할당을 막을 수 있습니다. 그러나 그것은 나쁘기 때문에 불변의 목록을 사용해야한다. – dumper

    +0

    예, 그게 문제이며 그 가능성 중 하나입니다. – assylias

    관련 문제