что такое 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.
-
логика основного фильтра
В mica-xss вышеупомянутая схема реализации рукописного черного списка или метода побега не принята, но непосредственно реализован инструментальный класс Jsoup.
jsoup реализует спецификацию WHATWG HTML5 и анализирует HTML в ту же DOM, что и современные браузеры.
- Очистка и синтаксический анализ HTML из URL-адресов, файлов или строк
- Поиск и извлечение данных с помощью обхода DOM или селекторов CSS.
- Управление элементами HTML, атрибутами и текстом
- Удалите пользовательский контент, чтобы предотвратить попадание в белый список безопасности и предотвратить XSS-атаки.
- Выводить чистый HTML