Запобігання міжсайтовому сценарію (XSS) у Spring Boot за допомогою політик безпеки вмісту (CSP)

Вступ

Безпека користувачів та їхніх особистих даних під час використання веб-програми має першочергове значення. Хоча цей керівний принцип був визнаний навіть на ранніх стадіях веб-розробки – зловмисники знаходять лазівки в програмах і можуть використовувати ваших користувачів.

Багато «стандартних» атак добре відомі та задокументовані, і захиститися від них нескладно. Щоб звільнити розробника від самостійного впровадження практик безпеки, такі фреймворки, як Spring Boot, абстрагувалися від різноманітних заходів безпеки та дозволяють просто застосовувати фільтри безпеки у ваших програмах для запобігання добре відомим атакам.

У цьому короткому посібнику ми розглянемо, що таке міжсайтовий сценарій (XSS), як хтось може здійснити цю атаку на вашу власну програму та як ви можете легко запобігти цьому за допомогою Spring Boot.

Що таке міжсайтовий сценарій (XSS)?

Міжсайтовий сценарій — це добре відомий і широко розповсюджений експлойт, у якому поганий актор вставляє сценарій у веб-програму.

Як правило, до веб-програм застосовується політика однакового походження, яка обмежує доступ сценаріїв на веб-сторінці до даних із джерел, якщо їх джерела не збігаються. Відповідно до політики того самого походження – якщо сторінка з a надійний веб-сайт можуть отримувати доступ до даних, що взаємодіють із користувачем (наприклад, файлів cookie), інші сторінки з того самого походження також можуть робити це. Ця форма контролю доступу здавалася достатньою для захисту цілісності даних у веб-додатках у той час.

Міжсайтовий сценарій обходить політику того самого джерела, шляхом введення шкідливого сценарію на сторінку надійного веб-сайту. Оскільки сценарій запускається з надійного веб-сайту, він виконується як надійний сценарій. Не було чіткого способу відрізнити шкідливі сценарії від нешкідливих, тому виконання довільного коду стало можливим за допомогою міжсайтового сценарію. Це варіюється від вставки дратівливих сповіщень до атак соціальної інженерії, негласного збору інформації про користувачів або перенаправлення користувачів на фішингові сторінки, які виглядають як частини надійних веб-сайтів.

Багато веб-сайти вразливі до атак із використанням міжсайтових сценаріїв, і сьогодні це поширена атака, хоча цей тип експлойту відомий ще з 90-х років.

Запобігання XSS у програмі Spring Boot за допомогою Content-Security Policy (CSP)

Spring Boot серйозно ставиться до безпеки, а модуль безпеки Spring реалізує гнучкі та потужні методи безпеки, які дозволяють розробникам звести до мінімуму їхні занепокоєння, коли йдеться про безпеку, яка часто вимагає низького рівня розуміння принципів обміну повідомленнями в мережі. додаток.

За замовчуванням Spring Boot реалізує кілька заголовків безпеки:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

X-XSS-Protection включено за замовчуванням! Цей заголовок безпеки намагається виявляти XSS намагається та блокує їх. Однак це не надійний процес, і браузери мають різні реалізації детекторів. Деякі веб-переглядачі, наприклад Chrome, мають навіть видалили свій XSS Auditor. Крім того, працює автоматичне виявлення Відображені атаки XSS, а також існують інші типи атак.

Більш сучасною альтернативою X-XSS-Protection є Політика безпеки щодо вмісту (CSP), які в першу чергу стосуються політик щодо того, які ресурси можна завантажувати, з яких джерел і в яких кінцевих точках. Станом на 2022 рік CSP є найкращим засобом запобігання XSS, Clickjacking та іншим типам атак. Не всі браузери реалізують CSP, тому він не включений у заголовки безпеки за замовчуванням.

Примітка: Навіть за наявності CSP це завжди найкращий спосіб перевірки будь-який введення користувача та переконайтеся, що обробка за допомогою вашої системи безпечна, щоб запобігти ін’єкції коду.

У Spring Boot – щоб налаштувати спеціальні заходи веб-безпеки, ви зазвичай розширюєте WebSecurityConfigurerAdapter класу і замінити configure() метод:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

Там, де директиви політики безпеки вмісту (надаються як a ;-розділений рядок) залежить від вашого випадку використання та джерел, яким ви хочете довіряти:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

Наприклад, веб-додаток може перелічувати надійні веб-сайти, з яких можна завантажувати сценарії з:

script-src https://trusted.com;

Або ви можете не довіряти будь-якому сторонньому веб-сайту:

script-src self;

Подібним чином програма може довіряти плагінам:

object-src https://trusted.com

Ви можете надати широкий спектр директив, зокрема:

  • default-src – Резервний варіант за замовчуванням
  • child-src – Дійсні джерела веб-воркерів
  • frame-src – Достовірні джерела для с і s
  • img-src – Дійсні джерела для зображень
  • media-src – Достовірні джерела для , та теги
  • script-src – Дійсні джерела сценаріїв (допомагає запобігти XSS)
  • style-src – Достовірні джерела для елементи
  • base-uri – Обмежує ресурси, доступні з елемент
  • frame-ancestors – Справедливі батьки , , , тощо елементи
  • і т.п.

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!

Наприклад, ось безпечний набір директив політики:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

Давайте додамо їх до нашої програми Spring Boot:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

Ви можете використовувати CSP-Оцінювач щоб оцінити, чи ваші директиви CSP дійсні та безпечний, і він вкаже, які директиви легко використовувати. Ось директива CSP, яка дозволяє Google API:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

Висновок

У цьому короткому посібнику ми розглянули, що таке міжсайтовий сценарій (XSS) і як він працює на цілісному рівні. Потім ми дослідили деякі заходи запобігання XSS, які можна легко застосувати за допомогою Spring Boot, щоб зробити ваші програми безпечними, і встановили Політика безпеки щодо вмісту (CSP).

Нарешті, ми дослідили директиви CSP і поглянули на кілька різних політик безпеки.

Часова мітка:

Більше від Stackabuse