Владельцем сайтов рекомендуется запрещать отображение страниц во фреймах на сторонних доменах, что защитит от атак типа clickjacking и некоторых других. Особенно актуально это для интернет-магазинов и сервисов.
Примером такой атаки может быть случай, когда под видом надежного сайта, злоумышленник у себя на домене подсовывает пользователям вредоносный код. Вариантов применения масса — подписка на ресурс в социальной сети, кража конфиденциальной информации, совершение покупок в интернет-магазинах за чужой счёт.
И вообще, если вы не YouTube, то не стоит, без видимой причины разрешать кому попало отображать у себя содержимое вашего сайта.
Не единственный, но рекомендуемый на сегодня способ запрета отображения веб-страницы внутри фрейма — использование заголовка X-Frame-Options, однако и он не идеален и иногда приводит к проблемам, например к некорректной работе Вебвизора в Яндекс.Метрике.
Разбираемся как настроить защиту и что делать если проблемы все таки-возникают.
Что такое X-Frame-Options
Заголовок HTTP ответа от сервера X-Frame-Options служит инструкцией для браузера, он разрешает или запрещает отображение страниц вашего сайта во фрейме. Может иметь три значения:
SAMEORIGIN
Разрешает загрузку страниц сайта во фрейме только если фрейм и страница расположены на одном домене.
DENY
Запрещает загрузку во фрейме.
ALLOW-FROM domain
Разрешает загрузку во фрейме только для указанного домена, не работает для Safari и Firefox.
Защита от фреймов в 1С-Битрикс
В 1С-Битрикс ограничение работы во фрейме включается на странице «Защита от фреймов» (Настройки — Проактивная защита — Защита от фреймов).
На вкладке «Исключения», можно указать страницы сайта, для которых ограничения не будут применяться. Также добавить свою страницу в исключения можно определив константу B_SECURITY_FRAME в значение false, до подключения ядра.
Важно! Чтобы данный функционал 1С-Битрикс корректно работал, заголовок X-Frame-Options на сервере должен быть установлен в значение SAMEORIGIN (как это сделать, читайте далее). Если заголовок отсутствует или установлен в значение отличное от рекомендуемого, «Сканер безопасности» 1С-Битрикс расценит это как потенциальную угрозу сайту и будет показывать соответствующее предупреждение в своём журнале.
Как настроить X-Frame-Options на Nginx
1. Найти секцию server, отвечающую за обработку запросов нужного сайта. Как правило это файлы в /etc/nginx/site-enabled/*.conf
Для версий Bitrix VM ниже 7.0 и чистого nginx скорее всего это будет файл /etc/nginx/nginx.conf или etc/nginx/bx/conf/bitrix.conf
Для Bitrix VM 7.0 и выше заголовок вынесен в отдельный файл /etc/nginx/bx/conf/http-add_header.conf
2. В секцию server нужного сайта добавить или закомментировать строку в зависимости от того хотите вы включить использование заголовка или выключить:
add_header X-Frame-Options SAMEORIGIN;
или
#add_header X-Frame-Options SAMEORIGIN;
3. Перезапустить nginx
systemctl restart nginx.service
или
service nginx restart
Как настроить X-Frame-Options на Apache
1. Найти конфигурационный файл для вашего сайта, зачастую это файлы /etc/apache2/httpd.conf, /etc/apache2/vhost.d/*.conf
2. Добавить или закомментировать строки в зависимости от того хотите вы включить использование заголовка или выключить:
<IfModule headers_module> Header set X-Frame-Options SAMEORIGIN </IfModule>
или
<IfModule headers_module> #Header set X-Frame-Options SAMEORIGIN </IfModule>
3. Перезапустить Apache
Либо внести эти же инструкции в файл .htaccess, при этом перезапуск сервера не требуется.
Решение проблем
Если вы используете сервисы, которым необходимо открытие вашего сайта во фрейме то ограничение работы во фрейме скорее всего приведёт к тому, что эти сервисы перестанут работать или будут работать некорректно.
Самой известной проблемой является некорректная работа Вебвизора от Яндекс. Данные собираются валидно, но при попытке просмотреть запись посещения возникает ошибка: «Невозможно воспроизвести посещение на данной странице. Возможные причины: Не установлен код счётчика или установлен запрет на отображение страницы во фрейме.»
Варианты добавления в конфиги исключений сводят всю идею X-Frame-Options на ноль, так как могут быть легко подделаны. Поэтому варианты типа приведенного ниже могут использоваться, но не рекомендуются.
location / { set $frame_options ''; if ($http_referer !~ '^https?:\/\/([^\/]+\.)?(yourdomain\.com|webvisor\.com)\/'){ set $frame_options 'SAMEORIGIN'; } add_header X-Frame-Options $frame_options; ... }
Для решения проблемы вам придётся сделать выбор: либо сервис (в данном случае вебвизор), либо безопасность, других вариантов пока к сожалению не существует.
Полезные ссылки
На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.
Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.