Запрет просмотра сайта через iframe

Может возникнуть ситуация когда какие-либо сайты начинают отображать контент вашего сайта во frame-блоках, цели могут быть разные: мошенничество, clickjacking, воровство вычислительных ресурсов (чтобы не нагружать свой сервер) или просто воровство контента. Можно ли защититься от этого? Да, можно. Об этом и пойдет речь в статье.

Запрет iframe через Javascript

Javascript'ов цель которых защитится от iframe существует большое количество. Но у большинства из них есть проблема - их можно обойти используя атрибут sandbox, при помощи которого можно запретить отработку скриптов во frame-окнах.

На данный момент наиболее лучшей защитой при помощи javascript считается вот этот метод:

Прописываем перед закрывающим тегом </head> css стиль:

<style id="antiClickjack">body{display:none !important;}</style>

Который говорит что нам не нужно отображать контент страницы. Его нужно прописать перед закрывающим тегом </head> от того, что тогда перекроются все другие стили body которые были объявлены ранее.

Далее объявляем Javascript, который удаляет этот стиль - то есть контент в конце концов будет отображаться.

<script type="text/javascript">
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>

Но все-таки более совершенной защитой будет запрет через отправку серверного заголовка.

Запрет iframe через заголовок X-Frame-Options

Серверный заголовок X-Frame-Options может принимать три значения, они сообщают что именно мы хотим запретить:

  • DENY - запрет отображения Вашего сайта в iframe для всех, в том числе и для вашего сайта.
  • SAMEORIGIN - запрещает отображать ваш сайт в iframe для всех, кроме вас самих (вашего сайта).
  • ALLOW-FROM uri - запрещает отображать сайт в iframe всем, кроме указанного сайта

Мы может отдать заголовок X-Frame-Options при помощи файла .htaccess или же php скрипта.

Запрещаем отображать сайт в iframe через заголовок X-Frame-Options в файле .htaccess

В этому случае в конфигурации веб-сервера apache должен быть включен модуль mod_headers, если он не будет включен, то сервер вернет 500-ю ошибку (Internal Server Error). Чтобы она не выскакивала при выключенном модуле  mod_headers можно использовать директиву IfModule которая в случае отключенного модуля не устанавливает заголовок X-Frame-Options, прописываем в файле .htaccess следующий код:

<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

Если эта защита не сработает, значит модуль mod_headers и будем устанавливать заголовки при помощи php-скрипта.

Запрещаем отображать сайт в iframe через заголовок X-Frame-Options в php-скрипте

Прописываем в начале файла header.php (если у вас wordpress) вот этот код:

<?php header("X-Frame-Options:sameorigin"); ?>

Кстати благодаря методу через php-скрипт мы получаем гибкость, можем выставлять при помощи php-скрипта разные условия, при которых этот заголовок будет отправляться.

Понравилось? =) Поделись с друзьями:

Обсуждение записи “Запрет просмотра сайта через iframe”

  1. Виктор says:

    Почему то в моем случае не помогло. Из-за клона сайта потерял половину посещаемости. Никак не могу с ним справиться.

  2. Виктория says:

    Владимир, огромное вам спасибо! Метод сработал, прямо камень с души!

  3. Сергей says:

    добрый день, та же песня.
    Сайт резко упал в выдаче.
    Начал искать причину, пока нашел только это
    moyperevod.ru.vlink88.com/goto/
    С .htaccsses не работает.
    Как через php реализовать в Joomla, знаете?

Обсудить