Проблема с XSRF-атакой CheckMarx

У меня есть контроллер REST, у которого есть метод deleteStudent, который принимает два параметра studentId, который равен Long, и section, который равен String.

@RequestMapping(value="/rest/deleteStudent/studentId/{studentId}/section/{section}", method = RequestMethod.DELETE)
public  Student deleteStudent(@PathVariable Long studentId, @PathVariable String section){
    return studentService.deleteStudent(studentId ,section);
}

Для приведенного выше кода checkmarx жалуется Это значение параметра проходит через код и в конечном итоге используется для изменения содержимого базы данных. Приложение не требует повторной аутентификации пользователя для запроса. Это может привести к подделке межсайтовых запросов (XSRF).

Я пробовал Htmlutils.htmlescape (из весенней веб-утилиты) в разделе, но не повезло.

Как избавиться от этой проблемы с галочкой?

Еще одна вещь, как возможна атака XSRF и SQL-инъекцией, если поле имеет тип Long?


person sar    schedule 30.11.2016    source источник


Ответы (2)


Вы уверены, что речь идет о параметре studentId, а не о параметре section?

Если это действительно так, я бы сказал, что это ложноположительный результат.

Если речь идет о параметре section, я бы вообще не беспокоился о том, защищены ли ваши SQL-запросы (например, если вы используете ORM или подготовленные операторы и т. д.).

В целом, я бы сказал, что это ложноположительный результат во всех случаях SQL-инъекций.

Тем не менее, для CSRF-атак вы действительно можете быть уязвимы.

Если хакер заставит администратора загрузить страницу, он сможет удалить любую учетную запись пользователя, даже не имея доступа, если вы не реализуете защиту CSRF.

person AntoineB    schedule 30.11.2016
comment
Я реализовал фильтр, который добавляет уникальный токен csrf, но все равно жалуется на атаку csrf. - person sar; 30.11.2016
comment
Если вы уверены, что защита CSRF работает правильно, это может быть ложным срабатыванием. Я не знаю, какой инструмент вы используете, но, возможно, он не в состоянии обнаружить наличие защиты, особенно если он только анализирует код, а не проверяет его функциональность... - person AntoineB; 30.11.2016
comment
@saurabh что это за фильтр? Ваш фрагмент кода не содержит токена защиты от csrf... - person yaloner; 30.11.2016
comment
@yaloner Это пружинный код, если есть код защиты от CSRF, он определенно находится не в контроллерах, а скорее в классе конфигурации. - person AntoineB; 01.12.2016
comment
@AntoineB Точно. Мы не можем ответить на вопрос CSRF, если вы не предоставите всю необходимую информацию, включая ваши реализации против CSRF. - person yaloner; 03.12.2016

Комментарий от Spring Security(https://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html):

Когда вы используете защиту CSRF? Мы рекомендуем использовать защиту CSRF для любого запроса, который может быть обработан браузером обычными пользователями. Если вы создаете службу, которая используется небраузерными клиентами, вы, вероятно, захотите отключить защиту CSRF.

Если ваша служба используется только небраузерными клиентами, вы можете исключить запрос XSRF из предустановки.

Если нет, вот как Checkmarx проверяет наличие токена подделки межсайтового запроса (Java/Cx/General/Find_XSRF_Sanitize):

  1. вызов метода: getNewXsrfToken, setRpcToken, verifyCSRFToken, isTokenValid
  2. имена переменных: токен, csrf, xsrf, nonce, captcha

Эти вызов методов и имена переменных используются в объявлении метода. Изнутри тела этих методов этих деклараций методов все эти запросы считаются очищенными и удаляются из списка потенциально испорченных запросов.

Все эти элементы исходного кода, найденные запросом CxQL Find_Interactive_Inputs, являются запросами.

person Happy Young    schedule 07.06.2021