Как установить 'X-Frame-Options' на iframe?


Если я создам iframe такой:

var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({

как я могу исправить ошибку:

отказано в отображении 'https://www.google.com.ua/?gws_rd=ssl' в кадре, потому что он установил "X-Frame-Options" в "SAMEORIGIN".

С помощью JavaScript?

9 95

9 ответов:

вы не можете установить X-Frame-Options на iframe. Это заголовок ответа, заданный доменом, из которого вы запрашиваете ресурс (google.com.ua в вашем примере). Они установили заголовок в SAMEORIGIN в этом случае, что означает, что они запретили загрузку ресурса в iframe вне их домена. Для получения дополнительной информации см. заголовок ответа X-Frame-Options на MDN.

быстрый осмотр заголовков (показано здесь в Chrome developer tools) раскрывает X-Frame-Options значение, возвращенное с хоста.

enter image description here

Вы, кажется, неправильно поняли проблему. X-Frame-Options - Это заголовок, отправленный обратно с запросом на состояние, если запрошенный домен позволит себе отображаться в кадре. Он не имеет ничего общего с javascript или HTML и не может быть изменен инициатором запроса.

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

дальнейшее чтение X-Frame-Options

Если вы контролируете сервер, который отправляет содержимое iframe, вы можете установить параметр для X-Frame-Options в вашем веб-сервере.

Настройка Apache

чтобы отправить заголовок X-Frame-Options для всех страниц, добавьте его в конфигурацию вашего сайта:

Header always append X-Frame-Options SAMEORIGIN

настройка nginx

чтобы настроить nginx для отправки заголовка X-Frame-Options, добавьте его в конфигурацию http, сервера или местоположения:

add_header X-Frame-Options SAMEORIGIN;

нет конфигурация

этот параметр заголовка является необязательным, поэтому, если параметр не установлен вообще, вы дадите возможность настроить его на следующий экземпляр (например, браузер посетителей или прокси)

источник:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

не совсем так... Я использовал

 <system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>

заголовок ответа HTTP X-Frame-Options может использоваться для указания того, следует ли разрешить браузеру отображать страницу в <frame>,<iframe> или <object>. Сайты могут использовать это, чтобы избежать атак clickjacking, гарантируя, что их содержимое не встроено в другие сайты.

Для Получения Дополнительной Информации: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

у меня есть альтернативное решение этой проблемы, которое я для демонстрации с помощью PHP:

iframe.php:

<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>

результаты конвертации.php:

<?php 
  echo file_get_contents("http://www.example.com");
?>

решение заключается в установке плагина браузера.

веб-сайт, который выдает заголовок HTTP X-Frame-Options стоимостью DENY (или SAMEORIGIN с другим источником сервера) не может быть интегрирован в IFRAME... если вы не измените это поведение, установив плагин для браузера, который игнорирует (например,Chrome игнорирует заголовки X-Frame).

обратите внимание, что это не рекомендуется по соображениям безопасности.

для этого вам нужно соответствовать местоположению в вашем apache или любой другой службе, которую вы используете

Если вы используете Apache, то в httpd.файл conf.

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>

вы можете установить опцию x-frame-option в веб-конфигурации сайта, который вы хотите загрузить в iframe, как это

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>

у меня была такая же проблема на моем сервере virtualmin (apache) для wordpress в подкаталоге, и ни один из вышеперечисленных ответов не мог решить проблему в моем случае и все еще получал сообщение об ошибке X-frame-options denied на консоли, пока я не попытался добавить строку ниже в на public_html\subdirectory\(корень wordpress) каталог:

header always set x-frame-options "SAMEORIGIN"

и это было единственное рабочее решение в моем случае. (обратите внимание, что есть часть, содержащую always set, а не append или always append)