Может возникнуть ситуация когда какие-либо сайты начинают отображать контент вашего сайта во 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-скрипта разные условия, при которых этот заголовок будет отправляться.
Почему то в моем случае не помогло. Из-за клона сайта потерял половину посещаемости. Никак не могу с ним справиться.
Владимир, огромное вам спасибо! Метод сработал, прямо камень с души!
добрый день, та же песня.
Сайт резко упал в выдаче.
Начал искать причину, пока нашел только это
moyperevod.ru.vlink88.com/goto/
С .htaccsses не работает.
Как через php реализовать в Joomla, знаете?