Security Headers: що це і як їх налаштувати
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: Security Headers — це заголовки відповіді HTTP, які передають браузеру правила безпечного опрацювання сторінки. Вони допомагають обмежувати, зокрема, запуск небажаних скриптів, вбудовування сторінки у фрейми сторонніх сайтів і розкриття інформації під час переходів між сайтами. Вони не замінюють безпечного коду й оновлень, але створюють додатковий рівень захисту.
Як працюють заголовки безпеки
Коли браузер завантажує сторінку, сервер надсилає її вміст і метадані, тобто інформацію, що описує відповідь. Заголовки HTTP є частиною цих метаданих. Вони не відображаються в тексті сторінки, але на їхній основі браузер може обмежувати використання отриманих ресурсів.
Заголовки безпеки можуть вимагати використання зашифрованого з’єднання, вказувати дозволені джерела скриптів або забороняти вбудовування сторінки у фрейм іншого сайту. Зазвичай їх задають у конфігурації сервера, застосунку, зворотного проксі або CDN — інфраструктури, що виступає посередником у доставленні вмісту.
Ці заходи захисту реалізує насамперед браузер. Вони не перешкоджають безпосередньому надсиланню запитів до застосунку іншими інструментами, тому не замінюють перевірки прав доступу на сервері.
Основні Security Headers та їх застосування
Єдиного набору налаштувань, придатного для кожного сайту, не існує. Наведені нижче заголовки захищають від різних загроз і потребують налаштування відповідно до роботи сайту.
| Заголовок | Для чого потрібен | На що зважати |
|---|---|---|
Content-Security-Policy | Визначає, зокрема, дозволені джерела скриптів, стилів та інших ресурсів. | Надто сувора політика може заблокувати форму, платежі або аналітику. |
Strict-Transport-Security | Вимагає від браузера використовувати HTTPS протягом зазначеного часу. | Тривалий строк дії та поширення на піддомени потребують підготовки всієї інфраструктури. |
X-Content-Type-Options | Зі значенням nosniff обмежує спроби браузера визначити тип ресурсу всупереч тому, що вказав сервер. | Сервер має надсилати правильний Content-Type, наприклад для скриптів і таблиць стилів. |
Referrer-Policy | Контролює, яка інформація про адресу сторінки передається в заголовку Referer. | Налаштування має враховувати приватність і потреби інтеграцій. |
Permissions-Policy | Обмежує доступ до окремих функцій браузера, наприклад камери або геолокації. | Підтримка окремих директив залежить від браузера. |
X-Frame-Options | Обмежує вбудовування сторінки у фрейми. | Має менш гнучкі можливості, ніж директива frame-ancestors у CSP. |
CSP, тобто Content Security Policy, допомагає обмежувати наслідки XSS — атак, під час яких небажаний код запускається в контексті сторінки. Самого списку довірених доменів недостатньо для повного захисту: важливі конкретні директиви, спосіб завантаження скриптів і відсутність надто широких винятків.
Захист від клікджекінгу, тобто спонукання користувача натиснути елемент сторінки, прихованої на сторонньому сайті, забезпечує, зокрема, директива frame-ancestors у CSP. Вона може повністю заборонити вбудовування сторінки або дозволити його лише для вказаних сайтів.
Приклад: сторінка з формою та зовнішніми сервісами
Припустімо, що сайт компанії використовує контактну форму, карту й зовнішній інструмент аналітики. Запровадження CSP, яка дозволяє лише ресурси з власного домену, може вимкнути карту й аналітику. Тому перед упровадженням потрібно з’ясувати, звідки сторінка завантажує скрипти, стилі, зображення та фрейми й куди надсилає запити.
Якщо сайт не має вбудовуватися в жоден фрейм, відповідний фрагмент політики може виглядати так:
Content-Security-Policy: frame-ancestors 'none'
Це лише правило щодо вбудовування, а не повна політика CSP. Воно не обмежує джерела скриптів або мережеві з’єднання. Якщо на сайті вже є CSP, правило потрібно узгодити з наявною конфігурацією, а не додавати ще одну політику без перевірки.
Для сторінки, якій не потрібні камера й мікрофон, можна розглянути таке налаштування:
Permissions-Policy: camera=(), microphone=()
Це налаштування не слід копіювати до застосунку для відеодзвінків. Правильно налаштований заголовок обмежує непотрібні можливості, а не функції, необхідні користувачеві.
Як перевірити й безпечно впровадити заголовки
Найпростіше відкрити інструменти розробника в браузері, перейти на вкладку мережі, оновити сторінку й вибрати запит основного документа. У розділі заголовків відповіді можна перевірити, що насправді отримав браузер. Сама наявність запису в конфігурації сервера ще не означає, що цей заголовок доходить до користувача.
Практична послідовність упровадження:
- Перевірте типові адреси: головну сторінку, вхід до облікового запису, форми та сторінки помилок. Відповіді можуть проходити через різні рівні інфраструктури.
- Визначте, де ви керуєте заголовками. Застосунок, сервер і CDN не повинні випадково перезаписувати налаштування або додавати суперечливі правила.
- Підготуйте CSP у режимі
Content-Security-Policy-Report-Only. Він дає змогу спостерігати за порушеннями без блокування ресурсів; збирання звітів потребує додаткового налаштування. - Протестуйте ключові дії користувача, зокрема вхід до облікового запису, надсилання форми й оплату, якщо вона передбачена.
- Увімкніть застосування обмежень політики й відстежуйте помилки після впровадження.
HSTS, тобто механізм, який вмикається через Strict-Transport-Security, упроваджуйте лише тоді, коли HTTPS працює належним чином. Параметр includeSubDomains поширює дію також на піддомени, тому перед його використанням перевірте й менш очевидні сервіси. Актуальний синтаксис і підтримку директив перевіряйте в офіційній документації платформи, яку використовуєте, та браузерів.
Чого не показує результат сканера безпеки
Сканер може виявити відсутній заголовок або ризиковане значення, але його оцінка не доводить безпечності застосунку. Деякі політики потрібні лише в певних випадках, а додавання їх заради кращої оцінки може порушити роботу інтеграцій.
Заголовки не виправлять помилкових прав доступу, вразливостей бази даних або витоку секретних даних у коді. Почніть із перевірки фактичних відповідей свого сайту й виберіть одну зміну, роботу якої зможете перевірити перед публікацією.
Дивіться також: Що таке CSP?
