Налаштування захисту від Clickjacking (X-Frame-Options) для сайту
Clickjacking — атака, при якій зловмисник вбудовує ваш сайт в прозорий iframe поверх іншої сторінки. Користувач думає, що кликає по кнопці стороннього сайту, але насправді взаємодіє з вашим. Наслідки: непередбачені переводи грошей, зміна настроєк, підтвердження дій.
Заголовок X-Frame-Options
Забороніть браузеру вбудовувати сторінку в iframe:
add_header X-Frame-Options "DENY" always;
# або
add_header X-Frame-Options "SAMEORIGIN" always;
| Значення | Поведінка |
|---|---|
DENY |
Забороняє вбудовування везде |
SAMEORIGIN |
Дозволяє тільки з того ж домену |
ALLOW-FROM uri |
Застарілий, не підтримується сучасними браузерами |
CSP frame-ancestors — сучасна альтернатива
X-Frame-Options застарілий, frame-ancestors у CSP дає більше гнучкості:
add_header Content-Security-Policy "frame-ancestors 'none'" always;
# або
add_header Content-Security-Policy "frame-ancestors 'self' https://trusted-partner.ua" always;
frame-ancestors 'none' — еквівалент X-Frame-Options: DENY. Для максимальної сумісності встановлюють обидва заголовки.
Налаштування в Apache
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self'"
Налаштування в Laravel
// app/Http/Middleware/SecurityHeaders.php
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('X-Frame-Options', 'DENY');
$response->header('Content-Security-Policy', "frame-ancestors 'none'");
return $response;
}
Виключення для віджетів
Якщо частина сайту намисно вбудовується (платіжна форма, віджет, embed-плеєр), застосовувати гранульовану настройку через CSP на конкретних маршрутах, а не глобально.
Строк реалізації
Настройка заголовків — 1–2 години включаючи тестування у всіх цільових браузерах.







