Перейти к основному содержимому

Предотвращение межсайтовых сценариев (XSS) в приложении Spring

· 3 мин. чтения

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 .