Как я могу обойти X-Frame-Options: HTTP-заголовок SAMEORIGIN? - PullRequest
39 голосов
/ 06 мая 2010

Я разрабатываю веб-страницу, которая должна отображать в фрейме отчет, обслуживаемый сервером SharePoint другой компании. Они в порядке с этим.

Страница, которую мы пытаемся отобразить в iframe, предоставляет нам X-Frame-Options: SAMEORIGIN, которая заставляет браузер (по крайней мере, IE8) отказаться от визуализации содержимого во фрейме.

Во-первых, это то, что они могут контролировать, или это то, что SharePoint просто делает по умолчанию? Если я попрошу их отключить это, они могут даже сделать это?

Во-вторых, можно ли что-то сказать браузеру, чтобы он игнорировал этот заголовок http и просто отображал фрейм?

Ответы [ 5 ]

26 голосов
/ 15 июня 2010

Если вторая компания рада, что вы получили доступ к их контенту в IFrame, тогда им нужно снять ограничение - они могут сделать это довольно легко в конфигурации IIS.

Вы ничего не можете сделать, чтобы обойти это, и все, что работает, должно быть исправлено быстро в исправлении безопасности.Вы не можете сказать браузеру просто визуализировать фрейм, если заголовок исходного содержимого говорит, что он не разрешен в фреймах.Это упростит перехват сеанса.

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

23 голосов
/ 31 августа 2014

ОБНОВЛЕНИЕ 2019: Вы можете обойти X-Frame-Options в <iframe>, используя мой X-Frame-Bypass Веб-компонент , Он расширяет элемент IFrame за счет использования нескольких прокси-серверов CORS и был протестирован в последних версиях Firefox и Chrome.

Вы можете использовать его следующим образом:

  1. (Необязательно) Включите Пользовательские элементы со встроенным полифилом Extends для Safari:

    <script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
    
  2. Включите модуль X-Frame-Bypass JS:

    <script type="module" src="x-frame-bypass.js"></script>
    
  3. Вставить пользовательский элемент X-Frame-Bypass:

    <iframe is="x-frame-bypass" src="https://example.org/"></iframe>
    
8 голосов
/ 18 мая 2012

Заголовок X-Frame-Options - это функция безопасности, применяемая на уровне браузера.

Если у вас есть контроль над пользовательской базой (отдел ИТ для приложения corp), вы можете попробовать что-то вроде скрипта greasemonkey (если можете) развернуть greasemonkey для всех и b) развернуть ваш скрипт совместно. .

Кроме того, вы можете прокси их результат. Создайте конечную точку на своем сервере, и пусть эта конечная точка откроет соединение с целевой конечной точкой и просто перенаправит трафик назад.

4 голосов
/ 16 августа 2016

Да Fiddler это вариант для меня:

  1. Открыть Меню Fiddler> Правила> Настроить правила (эффективно редактирует CustomRules.js).
  2. Найти функцию OnBeforeResponse
  3. Добавить следующие строки:

    oSession.oResponse.headers.Remove("X-Frame-Options");
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
    
  4. Не забудьте сохранить скрипт!
4 голосов
/ 04 апреля 2014

Что касается второго вопроса - вы можете использовать Fiddler фильтры, чтобы вручную установить заголовок ответа X-Frame-Options на что-то вроде ALLOW-FROM *. Но, конечно, этот прием будет работать только для вас - другие пользователи по-прежнему не смогут видеть содержимое iframe (если они не делают то же самое).

...