Вы должны быть немного осторожны с этими инструментами сканирования, так как иногда эти инструменты сообщают о ложных срабатываниях, а иногда никаких изменений кода не требуется.Я не эксперт по checkmarx, но должен быть уверен, что этот инструмент действительно понимает аннотации проверки bean-компонентов, которые вы используете, и вызов Jsoup.clean(personName, Whitelist.basic())
.
Я думаю, что сделал ВСЕ необходимые проверки.Что еще ???
Сначала вам нужно понять разницу между прикладным уровнем входной санитарией и бизнес-уровнем подтверждением ввода для контроллера.То, что вы делаете здесь, это вторая часть и первая может отсутствовать в вашей настройке, которая делается исключительно с точки зрения безопасности и обычно настраивается для всего приложения.
Вы используете аннотацию @Size
для ограничения размера ввода, но это не гарантирует плохие строки - строки, которые могут вызывать атаки XSS.Затем вы используете вызов Jsoup.clean(personName, Whitelist.basic()))
, чтобы очистить проверенный ввод этого размера.Поскольку я не уверен, что делает этот вызов, вам нужно убедиться, что новое значение - XSS - Safe.Вы немедленно передаете это значение в вызов БД и затем возвращаете Integer
вызывающей / клиентской стороне, поэтому я очень пессимистичен в отношении любой возможности XSS-атаки здесь, но инструмент говорит об этом.
Должно быть, отсутствует проверка.Как правильно проверить HTTP GET с помощью Spring Boot
Как я объяснил ранее, проверка ввода - это термин, обычно используемый для проверки ввода на уровне бизнес-логики, в то время как очистка / очистка ввода связана с безопасностью.В среде Spring Boot это обычно делается с помощью Spring Security APIs и включением фильтров XSS или написанием собственного фильтра XSS и подключением его к вашему приложению.Сначала идет фильтр, а потом ваш контроллер, поэтому ваш контроллер всегда будет иметь очищенное значение, и вы примените бизнес-проверки к этому очищенному значению.
Это ответ на широком уровне и для кода и т. Д. Вы могли бы сделать Google.Также предлагаем прочитать больше о XSS-атаках.Просто поймите, что есть несколько способов достичь одной и той же цели.
3 способа предотвращения XSS
Предотвращение XSS в Java
Как создать фильтр в Spring RESTful дляПредотвратить XSS?
Учебное пособие по межсайтовому скриптингу (XSS) с примерами, типами и предотвращением
В последней упомянутой ссылке,
Первым шагом в предотвращении этой атаки является проверка ввода.Все, что введено пользователем, должно быть точно проверено, потому что ввод пользователя может найти путь к выводу.
и что вы не делаете в своем коде, так что я бы предположил, что естьнет XSS.
РЕДАКТИРОВАТЬ:
Существует два аспекта безопасности XSS - во-первых, запрещение злонамеренного ввода кода на стороне сервера и это было бы сделано с использованием фильтра XSS & Иногда,нет ничего плохого в том, чтобы разрешить злонамеренный ввод (допустим, вы сохраняете этот злонамеренный ввод в БД или возвращаетесь в ответе API).
Второй аспект - информирование клиентов HTML о возможных атаках XSS (если мы точно знаем, что клиент API будет HTML / UI), тогда нам нужно добавить заголовок X-XSS-Protection
, что будет сделано с помощью приведенного ниже кода.,Это позволит браузеру включить функцию защиты XSS (если имеется).
@ Переопределить защищенный void configure (HttpSecurity http) выдает исключение {
http.headers().xssProtection()....
}
Что такое http-заголовок «X-XSS-Protection»?
Включена ли защита Xss в безопасности Spring по умолчанию?
Первый аспект, т. Е. Фильтр записи, см. my this answer иссылки в этом ответе.
Я думаю, что я неправильно написал выше, что Spring Security предоставляет фильтры для очистки входных данных, я думаю, это не так.Проверим и сообщу.Я написал свой пользовательский фильтр в строках, упомянутых в ответе на этот вопрос - Запрет XSS в контроллере Spring MVC
Вы также должны понимать, что Spring Boot тоже привык к написанию традиционных приложений MVCгде сторона сервера представляет HTML для рендеринга тоже.В случае ответов JSON (API-интерфейсы REST) клиент UI может контролировать то, что следует избегать, а что нет, сложность возникает из-за того, что выходные данные JSON не всегда передаются клиентам HTML, то есть браузерам.