Плагин фильтра атак Spring Boot XSS

Spring Boot Java

что такое XSS

Атака XSS (Cross Site Scripting) — это полное название атаки с использованием межсайтовых сценариев. Чтобы не путать с термином CSS (каскадные таблицы стилей), атака с использованием межсайтовых сценариев называется XSS. Уязвимость веб-безопасности, позволяющая внедрять вредоносный код на страницы, доступные другим пользователям.

процесс xss-атаки

Пример простой xss-атаки

  • Если определенная форма на веб-сайте не обрабатывается и пользователь отправляет соответствующий вредоносный код, браузер выполнит соответствующий код.

решение

Инструкции по XSS-фильтрации

  • xss строковый тип с привязкой к форме.
  • Выполните обработку xss для строковых данных json.
  • Предоставляет правила маршрутизации на уровне метода контроллера.

Используйте слюду-xss

Ввести зависимость

<!--XSS 安全过滤-->
  <dependency>
   <groupId>net.dreamlu</groupId>
   <artifactId>mica-core</artifactId>
   <version>2.0.9-GA</version>
  </dependency>
  <dependency>
   <groupId>net.dreamlu</groupId>
   <artifactId>mica-xss</artifactId>
   <version>2.0.9-GA</version>
  </dependency>

Тест XSS-фильтрации

Проверка фильтрации параметров GET

  • Создайте целевой интерфейс для имитации получения отправки
@GetMapping("/xss")
public String xss(String params){
  return params;
}
  • вернуть пустым
⋊> ~ curl --location --request GET 'http://localhost:8080/xss?params=%3Cscript%3Ealert(%27xxx%27)%3C/script%3E'

Проверка фильтрации параметров формы POST

  • Создайте целевой интерфейс для имитации отправки формы публикации
@PostMapping("/xss")
public String xss(String params){
  return params;
}
  • вернуть пустым
curl --location --request POST 'http://localhost:8080/xss' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'params=<script>alert('\''xxx'\'')</script>'

Проверка фильтрации параметров тела POST

  • Создайте целевой интерфейс для имитации отправки тела сообщения
    @PostMapping("/xss")
    public String xss(@RequestBody Map<String,String> body){
        return body.get("params");
    }
  • вернуть пустым
curl --location --request POST 'http://localhost:8080/xss' \
--header 'Content-Type: application/json' \
--data-raw '{
    "params":"<script>alert('\''XXX'\'')</script>"
}'

Пропустить некоторую фильтрацию интерфейса

можно использовать@XssCleanIgnoreАннотации игнорируются на уровне метода и класса.

@XssCleanIgnore
@PostMapping("/xss")
public String xss(@RequestBody Map<String,String> body){
  return body.get("params");
}

Принципиальный анализ

Анатомия общей реализации

  • В настоящее время большинство решений в Интернете показаны на рисунке ниже: новый XssFilter перехватывает параметры, отправленные пользователями, выполняет соответствующие экранирования и исключения из черного списка, а также завершает соответствующую бизнес-логику.Ядром всего процесса является создание новой оболочки запроса путем упаковки исходного запроса пользователя, чтобы гарантировать, что последующий процесс потока запросов может быть прочитан повторно..

реализация слюды-xss

1. Пользовательский редактор WebDataBinder поддерживает фильтрацию форм.

Роль Spring WebDataBinder заключается в преобразовании веб-запроса из веб-запроса.parametersпривязать к соответствующемуJavaBeanВыше тип параметра в методе Controller может быть базовым типом или инкапсулированным обычным типом Java. Если этот общий тип Java не объявляет никаких аннотаций, это означает, что каждое его свойство должно перейти в Request, чтобы найти соответствующие параметры запроса, и WebDataBinder может помочь нам извлечь параметры запроса из Request и связать их с JavaBeans.

SpringMVC предоставляет интерфейс для определяемого пользователем редактирования и привязки в процессе привязки, а инъекции могут выполнять фильтрацию в процессе привязки параметров JavaBean.

2. Пользовательская десериализация JsonDeserializer поддерживает фильтрацию Json.

В Spring Boot Jackson по умолчанию используется для сериализации и десериализации данных JSON, поэтому в дополнение к классам по умолчанию мы также можем написать свои собственные классы JsonSerializer и JsonDeserializer для пользовательских операций. Сообщение JSON, отправленное пользователем, будет привязано к JavaBean через JsonDeserializer Джексона. Нам нужно только настроить JsonDeserializer для завершения фильтрации в связанном JavaBean.

  1. логика основного фильтра

    В mica-xss вышеупомянутая схема реализации рукописного черного списка или метода побега не принята, но непосредственно реализован инструментальный класс Jsoup.

    jsoup реализует спецификацию WHATWG HTML5 и анализирует HTML в ту же DOM, что и современные браузеры.

    • Очистка и синтаксический анализ HTML из URL-адресов, файлов или строк
    • Поиск и извлечение данных с помощью обхода DOM или селекторов CSS.
    • Управление элементами HTML, атрибутами и текстом
    • Удалите пользовательский контент, чтобы предотвратить попадание в белый список безопасности и предотвратить XSS-атаки.
    • Выводить чистый HTML

Адрес источника: