SebWeo.com
Сьогодні я хочу поговорити про те, що не видно неозброєним оком, але що є фундаментом безпеки сучасного сайту. Уявіть, що ваш сайт — це фортеця. Ви можете мати міцні стіни (надійний хостинг) і складний пароль від воріт (адмінки), але якщо ви не дасте чітких інструкцій варті, як реагувати на шпигунів та диверсантів, ваша оборона буде слабкою.
HTTP-заголовки безпеки — це і є ті самі інструкції для браузера відвідувача. Вони наказують йому, як поводитися з вашим контентом, яким джерелам довіряти, і як захищатися від типових атак. У цій інструкції я покажу вам, як налаштувати найважливіші з них, перетворивши ваш сайт на справжню цифрову фортецю.
Правильно налаштовані заголовки безпеки — це вже не рекомендація, а стандарт для будь-якого якісного вебресурсу. Ось що ви отримуєте:
Я не буду перевантажувати вас десятками заголовків, а зосереджуся на п’яти, які дадуть максимальний ефект і є обов’язковими для впровадження.
Що робить: Примусово змушує браузер спілкуватися з вашим сайтом тільки через безпечне HTTPS-з’єднання, навіть якщо користувач введе в адресному рядку http://
. Це захищає від атак “людина посередині”.
Приклад для .htaccess
:
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
max-age=31536000
— наказує браузеру пам’ятати це правило протягом одного року (в секундах).
includeSubDomains
— поширює дію правила на всі ваші піддомени.
Важливо: Включайте цей заголовок тільки тоді, коли ви на 100% впевнені, що весь ваш сайт та піддомени працюють по HTTPS.
Що робить: Захищає від клікджекінгу (Clickjacking). Цей заголовок забороняє або обмежує вбудовування вашого сайту в <iframe>
на інших ресурсах. Про те, що таке iframe, я детально розповідав у попередній статті.
Приклад для .htaccess
:
Header always set X-Frame-Options "SAMEORIGIN"
Тут SAMEORIGIN
дозволяє вбудовувати сторінку тільки в межах вашого ж домену. Існує також опція DENY
, яка повністю забороняє будь-яке вбудовування.
Що робить: Запобігає “MIME-sniffing” атакам. Цей простий заголовок з єдиною директивою nosniff
забороняє браузеру “вгадувати” тип контенту. Якщо сервер каже, що це скрипт, браузер не буде намагатися виконати його як щось інше. Це блокує певний клас XSS-атак.
Приклад для .htaccess
:
Header set X-Content-Type-Options "nosniff"
Що робить: Контролює, скільки інформації про джерело переходу буде передано при кліку на посилання. Це важливо для приватності користувачів.
Приклад для .htaccess
:
Header set Referrer-Policy "strict-origin-when-cross-origin"
Це одна з найзбалансованіших політик: при переході в межах вашого сайту передається повний URL, а при переході на інший сайт — тільки доменне ім’я.
Що робить: Це найпотужніший, але і найскладніший у налаштуванні заголовок. Він дозволяє створити “білий список” джерел, з яких браузеру дозволено завантажувати ресурси (скрипти, стилі, зображення, шрифти). Це ефективний засіб проти 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 хвилин роботи можуть запобігти дням і тижням боротьби з наслідками атаки. Не відкладайте це на потім — зробіть свій сайт безпечнішим вже сьогодні!
Привіт! Сьогодні я хочу поговорити про один з найстаріших, але досі актуальних інструментів в арсеналі…
Статичний HTML-сайт — це як будинок, збудований за індивідуальним проєктом. Він надійний, швидкий і виглядає…
Ваші щоденні дії на роботі – те, як ви спілкуєтеся, керуєте своїм часом, вирішуєте проблеми…
Мабуть, багато разів було таке, що ви в захваті починаєте новий проєкт, але пізніше «перегораєте»…
Уявіть, що кожне посилання на вашому сайті — це двері. Звичайне посилання веде відвідувача до…
Коли мені хочеться освіжити свій гаджет, прикупити ігрову консоль чи, наприклад, розумний пилосос для дому,…