2016-11-18 9 views
2
othersMap.put("maskedPan", Class.forName("Some Class")); 

동적 클래스로드 사용을 제거합니다.이 동적 클래스로드 사용을 제거하거나이 클래스로드를 바꾸는 방법은 무엇입니까?

규칙

변경점 클래스는 동적으로 동적으로로드 된 클래스는 정적 클래스 초기화에 의해 실행되는 악성 코드를 포함 할 수로드 할 수 없습니다. I.E. 공격에 취약 할 수있는 클래스의 메소드를 인스턴스화하거나 명시 적으로 호출 할 필요조차 없습니다. 이 규칙은 동적 클래스 로딩을 사용할 때마다 문제가 발생합니다.

Class<?> cls; 

switch (System.getProperty("messageClassName")){ 
    case "com.example.Message1": 
    cls = com.example.Message1.class; 
    break; 
... 
} 
+0

원하는 것을 설명해야합니다. 왜 동적로드가 첫 번째 위치에 있는지. –

+1

입니다. 또는 런타임에 사용되는 동적로드를 말할 수 있지만 SONAR에서 테스트했을 때 예외가 발생합니다. 이것을 해결하는 방법 정적으로 시도했지만 해결할 수 없습니다. 제발 도와주세요. –

+0

왜 자바 스크립트 태그가 있습니까? –

답변

1

하나의 옵션은 그런 일이 될 것입니다 참조 반사를 사용하여 Class.forName() 메소드를 호출합니다,하지만 난 당신이 잘못된 문제가 해결 될 것이다 기분 : 그것은 당신의 조직에 수중 음파 탐지기를 실행하는 사람들을 설득하는 중입니다 할

Class.class.getDeclaredMethod("forName", String.class).invoke(null, className); 

올바른 방법을 그 무엇을 너는 필요하고 너를 위해 규칙에 예외를 만들어야한다. 또는 당신이 그들을 설득 할 수 없다면, 그 일을 그만 두십시오.

+0

작동 여부 @ k5_ 클래스 이름을 모른다. 그것은 사용자에 의해 제공되며 100 개의 수업이 있습니다. – Nitul

0

것은 그럼 당신은, 예를 소나 규칙을 현명을 시도 할 수 있습니다 : 비 규격 코드 예

String className = System.getProperty("messageClassName"); 
Class clazz = Class.forName(className); // Noncompliant 

+0

SONAR가 감지하고 있는지 여부를 알려주려고합니다. 여기에 className이 마지막입니까? : 'String className = System.getProperty ("messageClassName"); ' –

+1

'String.class'를 사용하는 이유는 조금 답을 설명해 주시겠습니까? 이것이 내'class.forname'을 어떻게 대체할까요? –