Как запретить открывать сайт в iframe

Ограничение отображения страниц сайта во фреймах сторонних доменов позволяет защитить ресурс от Clickjacking'a (подсовывание невидимого фрейма с целевого ресурса для получения клика от пользователя) и существенно снижает риск проведения Cross-site scripting атак.

Если у вас магазин или есть партнерские товары, то ваши продающие страницы могут использоваться недобросовестными вебмастерами для продаж аналогичного или того же товара. При этом показывается ваш сайт, но при клике ссылки подменяются на партнерские или же сайты конкурентов.

Так же iframe используется и во многих сервисах накрутки посещений и ПФ.

Несмотря на хорошую сторону есть еще и ряд недостатков в запрете iframe на сайте. Например, перестают работать тепловая карта в ЯндексМетрике, так же может выдавать ошибки или же отказаться работать вовсе Вебвизор. Стоит заметить, что Яндекс ацессоры проводят проверку веб-сайтов именно через показ их во фрейме на iframe-toloka, многие из вас могли замечать этот сайт в метрике. Но при этом сами сервисы Яндекса от встраивания защищены).

Вообщем запрещать встраивание вашего сайта или нет решать только вам. В этой статье мы рассмотрим способы, с помощью которых это можно выполнить.

Несколько вариантов как запретить открывать страницы своего сайта в <iframe> с помощью htaccess, PHP и JS.

Заблокировать страницы сайта в iframe

htaccess:

<IfModule headers_module>
Header set X-Frame-Options: "DENY"
</IfModule>

PHP:

header('X-Frame-Options: DENY');

До вызова функции header() не должно быть вывода в браузер (echo, ?>).

JavaScript:

<script>
if (window.parent.frames.length > 0) {
window.stop();}</script>

Заблокировать страницы в iframe, кроме своего сайта

htaccess:

<IfModule headers_module>
Header set X-Frame-Options: "SAMEORIGIN"
</IfModule>

PHP:

header('X-Frame-Options: SAMEORIGIN');

JavaScript:

<script>
if (window.parent.frames.length > 0 && document.referrer.indexOf('example.com') == -1) {
window.stop();
}</script>

Заблокировать страницы в iframe, кроме нескольких доменов

В заголовке X-Frame-Options есть третий параметр – ALLOW-FROM, который указывает разрешенный URL, но он устарел и не работает. На смену ему пришел заголовок Content-Security-Policy с директивой frame-ancestors.

htaccess:

<IfModule headers_module>
Header set Content-Security-Policy "frame-ancestors 'self' http://example.com http://example.ru"</IfModule>

Для поддержки IE, нужно отправлять второй заголовок X-Content-Security-Policy с таким же содержанием.

PHP:

header("Content-Security-Policy: frame-ancestors 'self' http://example.com http://example.ru");

Второй вариант, без заголовка Content-Security-Policy:

if (strpos($_SERVER['HTTP_REFERER'], 'example.com') === false && strpos($_SERVER['HTTP_REFERER'], 'example.ru') === false) {
Header('X-Frame-Options: SAMEORIGIN');
}

Результатом использования любого из способов будет подобное окно на сайте встраивания:

screenshot 2021 09 05 at 20 19 16 free iframe checker v3 0

По своим наблюдениям могу добавить. Если вы используете WordPress, то стоит использовать способ с добавлением доменов исключений, в который нужно внести домен своего сайта. В противном случае некоторые плагины, которые требуют доступа к сайту для просчетов, могут работать не верно из-за отсутствия доступа к сайту. Например, Jetpack Boost выдает ошибку пре генерировании CSS если на сайте блокируется iframe другим способом. Таковых плагинов не много, но стоит знать, что причина ошибок может крыться и в этом.

Проверяем, можно ли встроить сайт через iframe

Для этой цели есть простой онлайн сервис для проверки.

Ссылка на сервис: http://www.tinywebgallery.com/blog/advanced-iframe/free-iframe-checker

Результат проверки:

screenshot 2021 09 05 at 20 19 44 free iframe checker v3 0

Вас могут заинтересовать:

Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии