Зупиніть Clickjacking, заборонивши завантажувати свій сайт WordPress у фреймі
Клікджекінг — це потенційна загроза безпеці, спричинена тим, що хтось завантажує ваш веб-сайт у фрейм на іншому веб-сайті та створює враження, ніби веб-сайт є законним, однак вони будуть перехоплювати ваші взаємодії з цим сайтом, наприклад надсилання форм.
Наприклад, якщо ваш веб-сайт вимагає від користувача входу в систему, зловмисний веб-сайт може реєструвати ім’я користувача та паролі користувачів, які входять через їхні фреймовані сайти за допомогою атаки зловмисників.
На щастя, запобігти клікджекінгу в WordPress досить просто. Ви можете просто додати цей маленький фрагмент коду у свій functions.php
файл, щоб налаштувати X-FRAME-OPTIONS
заголовокSAMEORIGIN.
function wc_prevent_clickjacking() {
header( 'X-FRAME-OPTIONS: SAMEORIGIN' );
}
add_action( 'send_headers', 'wc_prevent_clickjacking', 10 );
Разом із WordPress буде надіслано заголовок, який повідомляє браузерам не допускати відображення сторінок у фреймах, розміщених не в тому самому домені, що й ваш веб-сайт.
Клікджекінг і старіші браузери
Старіші браузери (браузери старші за Internet Explorer 8 (IE8)) не розуміють X-FRAME-OPTIONS
заголовок, тому ми повинні повернутися до JavaScript. Для цього ви можете використовувати наступний код:
try { top.document.domain } catch (e) {
var f = function() {
document.body.innerHTML = '';
};
setInterval( f, 1 );
if (document.body) {
document.body.onload = f;
};
}
У своїй темі створіть папку з назвою JS
та виріжте та вставте цей фрагмент коду у файл з назвою clickjack-protection.js
.
Звичайно, ми хочемо лише поставити вищезгаданий сценарій для завантаження для браузерів, старіших за IE8, тому ми можемо використати для цього старий добрий умовний оператор, розмістивши такий код у вашому functions.php
файлі:
function wc_prevent_clickjacking_older_browsers() {
$script_url = get_stylesheet_directory_uri(). 'js/clickjack-protection.js';
wp_enqueue_script(
'clickjack-protection-js',
$script_url
);
wp_script_add_data( 'clickjack-protection-js', 'conditional', 'lt IE 8' );
}
add_action( 'wp_enqueue_scripts', 'wc_prevent_clickjacking_older_browsers', 10 );