Налаштування HTTP-заголовків безпеки: Практична інструкція
Опубліковано

Налаштування HTTP-заголовків безпеки: Практична інструкція

 

 

Сьогодні я хочу поговорити про те, що не видно неозброєним оком, але що є фундаментом безпеки сучасного сайту. Уявіть, що ваш сайт — це фортеця. Ви можете мати міцні стіни (надійний хостинг) і складний пароль від воріт (адмінки), але якщо ви не дасте чітких інструкцій варті, як реагувати на шпигунів та диверсантів, ваша оборона буде слабкою.

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

 

Чому це так важливо?

Правильно налаштовані заголовки безпеки — це вже не рекомендація, а стандарт для будь-якого якісного вебресурсу. Ось що ви отримуєте:

  • Захист від поширених атак: Ви ускладнюєте життя хакерам, які намагаються провести атаки типу XSS, клікджекінг або викрадення даних.
  • Підвищення довіри користувачів: Браузери візуально показують безпечне з’єднання, а захищений сайт викликає більше довіри.
  • Позитивний сигнал для SEO: Хоча це і не прямий фактор ранжування, Google цінує безпечні сайти. Наявність HTTPS (яке посилюється заголовком HSTS) є чітким сигналом якості. Детальніше про це можна почитати в одній з моїх статей у блозі.

 

“Джентльменський набір”: 5 ключових HTTP-заголовків

Я не буду перевантажувати вас десятками заголовків, а зосереджуся на п’яти, які дадуть максимальний ефект і є обов’язковими для впровадження.

 

1. Strict-Transport-Security (HSTS)

Що робить: Примусово змушує браузер спілкуватися з вашим сайтом тільки через безпечне HTTPS-з’єднання, навіть якщо користувач введе в адресному рядку http://. Це захищає від атак “людина посередині”.

Приклад для .htaccess:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
Що означають ці директиви?

max-age=31536000 — наказує браузеру пам’ятати це правило протягом одного року (в секундах).
includeSubDomains — поширює дію правила на всі ваші піддомени.

Важливо: Включайте цей заголовок тільки тоді, коли ви на 100% впевнені, що весь ваш сайт та піддомени працюють по HTTPS.

 

2. X-Frame-Options

Що робить: Захищає від клікджекінгу (Clickjacking). Цей заголовок забороняє або обмежує вбудовування вашого сайту в <iframe> на інших ресурсах. Про те, що таке iframe, я детально розповідав у попередній статті.

Приклад для .htaccess:

Header always set X-Frame-Options "SAMEORIGIN"

Тут SAMEORIGIN дозволяє вбудовувати сторінку тільки в межах вашого ж домену. Існує також опція DENY, яка повністю забороняє будь-яке вбудовування.

 

3. X-Content-Type-Options

Що робить: Запобігає “MIME-sniffing” атакам. Цей простий заголовок з єдиною директивою nosniff забороняє браузеру “вгадувати” тип контенту. Якщо сервер каже, що це скрипт, браузер не буде намагатися виконати його як щось інше. Це блокує певний клас XSS-атак.

Приклад для .htaccess:

Header set X-Content-Type-Options "nosniff"

 

4. Referrer-Policy

Що робить: Контролює, скільки інформації про джерело переходу буде передано при кліку на посилання. Це важливо для приватності користувачів.

Приклад для .htaccess:

Header set Referrer-Policy "strict-origin-when-cross-origin"

Це одна з найзбалансованіших політик: при переході в межах вашого сайту передається повний URL, а при переході на інший сайт — тільки доменне ім’я.

 

5. Content-Security-Policy (CSP)

Що робить: Це найпотужніший, але і найскладніший у налаштуванні заголовок. Він дозволяє створити “білий список” джерел, з яких браузеру дозволено завантажувати ресурси (скрипти, стилі, зображення, шрифти). Це ефективний засіб проти XSS-атак.

Приклад для .htaccess (базова політика):

Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;"
Як читати цю політику?

default-src 'self' — за замовчуванням дозволяє завантажувати ресурси тільки з власного домену.
script-src 'self' https://trusted-cdn.com — скрипти можна завантажувати з власного домену та з довіреного CDN.
style-src 'self' https://fonts.googleapis.com — стилі можна завантажувати з власного домену та з Google Fonts.
font-src 'self' https://fonts.gstatic.com — шрифти можна завантажувати з власного домену та з серверів Google.

Увага: Неправильне налаштування CSP може “зламати” ваш сайт. Починайте з простої політики і поступово додавайте правила.

 

Як все це впровадити та перевірити?

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

Готовий блок для копіювання:

<IfModule mod_headers.c>
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
    Header always set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
    Header set Referrer-Policy "strict-origin-when-cross-origin"
    # Починайте з простого CSP або закоментуйте його, якщо не впевнені
    # Header set Content-Security-Policy "default-src 'self';"
</IfModule>

Після збереження змін, ви можете перевірити наявність заголовків. Для цього відкрийте ваш сайт у браузері, натисніть F12, перейдіть на вкладку “Network” (Мережа), перезавантажте сторінку, клікніть на перший запит (ваш документ) і подивіться на “Response Headers” (Заголовки відповіді).

 

 

Висновок: Безпека — це процес, а не разова дія

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

На мою думку, це той випадок, коли 15 хвилин роботи можуть запобігти дням і тижням боротьби з наслідками атаки. Не відкладайте це на потім — зробіть свій сайт безпечнішим вже сьогодні!

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *