1. Обзор
При создании веб-приложения Spring важно сосредоточиться на безопасности. Межсайтовый скриптинг (XSS) — одна из самых серьезных атак на веб-безопасность.
Предотвращение атаки XSS — сложная задача в приложении Spring. Spring предоставляет встроенную справку для полной защиты.
В этом руководстве мы будем использовать доступные функции Spring Security.
2. Что такое атака с использованием межсайтовых сценариев (XSS)?
2.1. Определение проблемы
XSS — распространенный тип атаки путем внедрения. В XSS злоумышленник пытается выполнить вредоносный код в веб-приложении. Они взаимодействуют с ним через веб-браузер или инструменты HTTP-клиента, такие как Postman .
Существует два типа XSS-атак:
- Отраженный или непостоянный XSS
- Сохраненный или постоянный XSS
В отраженном или непостоянном XSS ненадежные пользовательские данные отправляются в веб-приложение, которое немедленно возвращается в ответе, добавляя ненадежный контент на страницу. Веб-браузер предполагает, что код пришел с веб-сервера, и выполняет его. Это может позволить хакеру отправить вам ссылку, по которой ваш браузер извлечет ваши личные данные с сайта, который вы используете, а затем заставит ваш браузер перенаправить их на сервер хакера.
В хранимом или постоянном XSS ввод злоумышленника сохраняется веб-сервером. Впоследствии любые будущие посетители могут выполнить этот вредоносный код.
2.2. Защита от атаки
Основной стратегией предотвращения XSS-атак является очистка пользовательского ввода.
В веб-приложении Spring пользовательский ввод представляет собой HTTP-запрос. Чтобы предотвратить атаку, мы должны проверить содержимое HTTP-запроса и удалить все, что может исполняться на сервере или в браузере.
Для обычного веб-приложения, доступ к которому осуществляется через веб-браузер, мы можем использовать встроенные функции Spring Security (Reflected XSS).
3. Обеспечение XSS-безопасности приложения с помощью Spring Security
Spring Security по умолчанию предоставляет несколько заголовков безопасности. Он включает заголовок X-XSS-Protection .
X-XSS-Protection
говорит браузеру блокировать то, что выглядит как XSS. Spring Security может автоматически добавить этот заголовок безопасности в ответ. Чтобы активировать это, мы настраиваем поддержку XSS в классе конфигурации Spring Security.
Используя эту функцию, браузер не выполняет рендеринг при обнаружении попытки XSS. Однако в некоторых веб-браузерах не реализован аудитор XSS. В этом случае они не используют заголовок X-XSS-Protection
.
Чтобы решить эту проблему, мы также можем использовать функцию Content Security Policy (CSP) .
CSP — это дополнительный уровень безопасности, который помогает смягчить атаки XSS и инъекции данных. Чтобы включить его, нам нужно настроить наше приложение для возврата заголовка Content-Security-Policy
, предоставив bean-компонент WebSecurityConfigurerAdapter
:
@Configuration
public class SecurityConf extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.xssProtection()
.and()
.contentSecurityPolicy("script-src 'self'");
}
}
4. Вывод
В этой статье мы увидели, как предотвратить атаки XSS с помощью функции xssProtection
Spring Security .
Как всегда, исходный код можно найти на GitHub .