CheckMarx — Как исправить отчет о внедрении кода?

#java #spring-boot #code-injection #checkmarx

Вопрос:

Checkmarx обнаружил следующую ошибку:

 @RequestMapping(value = RequestMappings.PROVA, method=RequestMethod.POST)
public ResponseEntity<? extends Object> provaAction(@RequestBody(required = false) Object[] inputExample,
        HttpServletRequest req, HttpServletResponse res) throws Exception {
 

Ошибка:

Метод getOutput приложения получает и динамически выполняет код, управляемый пользователем, с помощью invoke, в строке 153 Service.java. Это может позволить злоумышленнику вводить и запускать произвольный код. Злоумышленник может ввести выполненный код с помощью пользовательского ввода, inputExample, который извлекается приложением в методе PROVA, в строке 39 Service.java.

Использование метода inputExample из строки, но не является функцией

общедоступные перечисления вызываемых классов { inputExample (InputExample .class);

 private final Class clazz;
InvokeableClasses(Class clazz){
    this.clazz = clazz;
}

public Class getClazz() {
    return this.clazz;
}

public static InvokeableClasses fromString(String className) {
    for(InvokeableClasses currentInvokeableClass : InvokeableClasses.values()) {
        if(currentInvokeableClass.getClazz().getSimpleName().equalsIgnoreCase(className)) {
            return currentInvokeableClass;
        }
    }
    return null;
}
 

}

Как я могу исправить галочку ??

Спасибо

Ответ №1:

Используйте встроенный метод getClass() объекта вместо getClazz()

 for(InvokeableClasses currentInvokeableClass : InvokeableClasses.values()) {
    if(currentInvokeableClass.getClass().getSimpleName().equalsIgnoreCase(className)) {
        return currentInvokeableClass;
    }
} 
 

Это метод, который распознает Checkmarx