Как установить "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?

Ответ 1

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

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

enter image description here

Ответ 2

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

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

Дальнейшее чтение по X-Frame-Options

Ответ 3

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

Настройка Apache

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

Header always append X-Frame-Options SAMEORIGIN

Настройка nginx

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

add_header X-Frame-Options SAMEORIGIN;

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

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

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

Ответ 4

не очень... я использовал

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

Ответ 5

Поскольку решение не было упомянуто для серверной стороны:

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

           Header set Access-Control-Allow-Origin "*"
           Header set X-Frame-Options "allow-from *"

Ответ 6

Заголовок ответа 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>

target_url.php:

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

Ответ 7

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

header always set x-frame-options "SAMEORIGIN"

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

Ответ 8

Решение - установить плагин для браузера.

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

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

Ответ 9

Для этой цели вам необходимо сопоставить местоположение в вашем 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>

Ответ 10

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

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

Ответ 11

Вы не можете добавить x-iframe в свое тело HTML, так как он должен быть предоставлен владельцем сайта и находится в рамках правил сервера.

Вероятно, вы можете создать PHP файл, который загружает содержимое целевого URL-адреса и вставляет этот php-URL, это должно работать без сбоев.

Ответ 12

Вы можете сделать это в файле конфигурации уровня экземпляра tomcat (web.xml), добавив 'filter' и filter-mapping 'в файл конфигурации web.xml. это добавит [X-frame-options = DENY] на всю страницу, так как это глобальная настройка.

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
          <param-name>antiClickJackingEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>antiClickJackingOption</param-name>
          <param-value>DENY</param-value>
        </init-param>
    </filter>

  <filter-mapping> 
    <filter-name>httpHeaderSecurity</filter-name> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

Ответ 13

и если ничего не помогает, и вы все еще хотите представить этот сайт в iframe, подумайте об использовании компонента X Frame Bypass, который будет использовать прокси.

Ответ 14

попробуй это

response['X-Frame-Options'] = 'ALLOWALL'

или же

response['X-Frame-Options'] = 'ALLOW-FROM http://yourdomain.com'

пример

class ExampleView(generic.View):

    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(ExampleView, self).dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        res = api_request('get', 'example/xyx')
        response = HttpResponse(res)
        return self.set_response_header(request, response)

    def options(self, request, *args, **kwargs):
        response = HttpResponse()
        return self.set_response_header(request, response)

    def set_response_header(self, request, response):
        response['Access-Control-Allow-Origin'] = request.META.get('HTTP_ORIGIN') if request.META.get('HTTP_ORIGIN') else '*'
        response['Access-Control-Allow-Headers'] = 'x-requested-with, content-type, accept, origin, authorization, x-csrftoken, user-agent, accept-encoding, cache-control'
        response['Access-Control-Allow-Methods'] = 'GET, POST, PUT, PATCH, DELETE, OPTIONS'
        response['Access-Control-Max-Age'] = '86400'
        response['Access-Control-Allow-Credentials'] = 'true'
        response['X-Frame-Options'] = 'ALLOWALL'
        return response