Не работает Вебвизор на сайте Битрикс

На днях случайно столкнулся с такой проблемой, поскольку мы стараемся оптимально настроить хостинг под требования битрикс.

Она из угроз «Сканера безопасности»: «Разрешено отображение сайта во фрейме с произвольного домена»

Для устранения угрозы битрикс рекомендует:

<IfModule headers_module>
 Header set X-Content-Type-Options nosniff
 Header set X-Frame-Options SAMEORIGIN
</IfModule>

Что вполне логично с точки зрения безопасности, но отключает возможность работы вебвизора. Конечно данные в нем собираются валидно, просто нет возможности их просмотреть.

Вебвизор на битриксе

Сразу на ум приходит несколько вариантов решения.

1. Использовать инструмент битрикс Настройки/Проактивная защита/Защита от фреймов/Исключения исключив требуемый нам раздел, но мало вероятно что данное решение может подойти.

2. Можно использовать исключение.

Frame-Options: Allow-From HOSTNAME 

3. Воспользоваться спорным вариантом:

php if (strpos($_SERVER['HTTP_REFERER'],'http://metrika.yandex') === false) header('X-Frame-Options:Sameorigin');

Но у всех вариантов есть один изъян. Любое из исключений можно легко подделать, фактически сводя всю идею в ноль.

Вебвизор на битриксе

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

Ответ 1с-битрикс был лаконичен и прост.

Добрый день!

Нет смысла в «set X-Frame-Options SAMEORIGIN», если он работает по какому-то условию, все эти условия можно создать искусственно.
В Вашем случает нужно определиться, либо безопасность, либо Яндекс, т. к. он как раз использует то, от чего рекомендуется защищаться.

С уважением,
старший специалист техподдержки
Митрофанов Михаил

Так что у вас остается только два варианта:

  1. Не включать Header set X-Frame-Options SAMEORIGIN просто пропуская этот чек в «сканере безопасности»
  2. Отказ от вебвизора

Оставить комментарий

Комментарии (7)

  1. Anton 27.10.2015 Ответить
    Я смотрю - 1С жжет.
    Интересно, как они предлагают подделывать HTTP заголовки в браузере пользователя?
    Да, подделать их на кастомном браузере - ничего не стоит. Но вспоминаем, зачем они нужны: для защиты от ClickJacking, а эта атака проходит через пользовательский браузер, который точно не будет подделывать заголовки. Ну разве что злоумышленник не поставит туда еще и свое злое расширение. Правда в таком случае зачем ему вообще ClickJacking, можно гораздо проще все делать. (:
    Остается последний вариант - перехват трафика. Но что-то мне подсказывает, что если вы заботитесь об атаках типа ClickJacking, то https у вас внедрен и подавно, а если нет - то не мучайтесь защитой от подделки кликов, вас взломать можно гораздо проще. (:
  2. Sergey 29.12.2015 Ответить
    не получалось сделать - не работала конструкция с ALLOW-FROM uri, но есть временное решение: прописать в htaccess Header set X-Frame-Options "" и комментировать когда не нужно смотреть статистику, либо присваивать нулевое значение средствами php для метрики
  3. Вадим 29.01.2016 Ответить
    > Нет смысла в «set X-Frame-Options SAMEORIGIN», если он работает по какому-то условию

    Да. При этом в админке проактивной защиты, используя стандартный функционал, можно добавить исключения, для которых защита от фреймов работать не будет.
  4. Виктор
    Виктор 25.05.2017 Ответить
    Дело не в админке, дело в дыре которую вы создаете.
  5. Andrey 06.02.2018 Ответить
    на самом деле все гораздо проще SAMEORIGIN означает юзать то что что и если в запросе стоит заголовок Origin.
    просто надо выставлять нужный заголовок (как это сделать в битриксе не знаю) пример на C#

    var host = Regex.Replace(orign, "^https?://", "");
    var domain = DBCache.Partners.ResolveDomain(host); // проверка домена на список разрешенных поддоменов самого сайта
    if (!string.IsNullOrWhiteSpace(domain) || host.TrimEnd('/') == "webvisor.com")
    {
    httpContext.Response.Headers.Add("Access-Control-Allow-Origin", orign);
    httpContext.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
    httpContext.Response.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With,Cache-Control"); //,accept,HTTP_X_REQUESTED_WITH, withCredentials
    httpContext.Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
    }

    вот у меня как раз возникла проблема как определить хост плэера вебвизора (как показал опыт это нифига не webvisor.com)
  6. Виктор
    Виктор 08.02.2018 Ответить
    Нет смысла, это так же откроет дырку в системе безопасности.