#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