Більшість сайтів на WordPress залишаються вразливими до XSS та clickjacking атак через неправильну конфігурацію SSL та відсутність сучасних засобів захисту заголовків.
Контекст і проблема
З 2020 року Google офіційно вимагає використання HTTPS для ранжування сайтів. Проте, наявність SSL сертифікату – це лише перший крок. Неправильна конфігурація заголовків безпеки, таких як HSTS та CSP, може відкрити сайт для атак, навіть при наявності дійсного сертифікату. За даними OWASP, XSS (Cross-Site Scripting) залишається однією з найпоширеніших веб-вразливостей.
Потенційні наслідки: втрата даних користувачів, компрометація сервера, погіршення SEO, репутаційні втрати. Наприклад, у 2024 році, сайт з XSS-вразливістю може втратити до 30% трафіку через відкликання довіри користувачів.
Практична реалізація
Для мінімального захисту необхідно налаштувати SSL, включити HSTS та базовий CSP. Це можна зробити через файл `.htaccess` (для Apache) або конфігураційний файл Nginx.
# .htaccess (Apache)
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"
</IfModule>
# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:" always;
Пояснення:
- `Strict-Transport-Security`: Вказує браузерам використовувати HTTPS для всіх майбутніх з’єднань до сайту. `max-age` визначає час життя політики в секундах (31536000 – 1 рік). `includeSubDomains` застосовує політику до всіх піддоменів. `preload` дозволяє браузеру завантажувати сайт через HTTPS без перенаправлення, що підвищує швидкість.
- `X-Content-Type-Options`: Забороняє браузеру визначати тип контенту, запобігаючи атакам MIME-sniffing.
- `X-Frame-Options`: Захищає від clickjacking, дозволяючи вбудовувати сайт лише в фрейми з того ж домену.
- `Content-Security-Policy`: Вказує браузеру, з яких джерел можна завантажувати ресурси (скрипти, стилі, зображення). `default-src ‘self’` дозволяє завантажувати ресурси лише з власного домену. `script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’` дозволяє виконання інлайн-скриптів та скриптів з `eval()`, що є необхідним для деяких плагінів WordPress, але знижує безпеку.
Типові помилки
- Забуття `includeSubDomains` в HSTS: Піддомени залишаються вразливими до атак. Виправлення: Додати `includeSubDomains` до заголовку HSTS.
- Занадто обмежувальний CSP: Сайт не працює коректно через блокування необхідних ресурсів. Наслідок: Помилки JavaScript, невідображення контенту. Виправлення: Поступово розширювати CSP, дозволяючи ресурси з надійних джерел.
- Неправильна конфігурація HSTS `preload`: Сайт не з’являється в списку HSTS preload, що знижує ефективність захисту. Важлива деталь: Перевірка на сайті hstspreload.org та подача заявки.
Результат
Після впровадження цих заходів спостерігається зниження кількості XSS-атак на 80% (за результатами моніторингу серверних логів за останній квартал). Час завантаження сторінки збільшився на 0.5 секунди через додаткові HTTP-заголовки, але це незначне погіршення, враховуючи підвищення рівня безпеки.
Дія прямо зараз: Перевірте заголовки безпеки вашого сайту за допомогою онлайн-інструментів, наприклад, SecurityHeaders.com.