Як встановити "Параметри X-Frame" на iframe?


170

Якщо я створю 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" на "SAMEORIGIN".

з JavaScript?

Відповіді:


227

Ви не можете встановити X-Frame-Optionsна iframe. Це заголовок відповіді, встановлений доменом, з якого ви запитуєте ресурс ( google.com.uaу вашому прикладі). У SAMEORIGINцьому випадку вони встановили заголовок , що означає, що вони заборонили завантажувати ресурс за iframeмежами свого домену. Для отримання додаткової інформації див заголовок відповіді X-Frame-Options на MDN.

Швидкий огляд заголовків (показаний тут у інструментах для розробників Chrome) дозволяє виявити X-Frame-Optionsзначення, повернене від хоста.

введіть тут опис зображення


7
За допомогою YouTube ви можете змінити URL-адресу кінцевої точки на "вбудовувану" версію. Дивіться stackoverflow.com/questions/25661182/… (я знаю, що це не строго те, що шукає ОП, але Google спочатку дає такий результат!)

73

X-Frame-Optionsє заголовком, включеним у відповідь на запит про те, якщо запитуваний домен дозволить себе відображати в кадрі. Це не має нічого спільного з JavaScript або HTML і не може бути змінено джерелом запиту.

Цей веб-сайт встановив цей заголовок, щоб заборонити його відображення в iframe. Клієнт нічого не може зробити, щоб зупинити таку поведінку.

Подальше читання на X-Frame-Options


Він встановлений у заголовку відповіді, а не в заголовку запиту. Але в іншому випадку точне пояснення!
ніканг

2
@nickang це я мав на увазі, проте я згоден, що термінологія не була зрозумілою. Я відредагував це, щоб усунути будь-яку плутанину. Дякую.
Рорі Маккросан

31

Якщо ви керуєте Сервером, який надсилає вміст 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


Це мені допомогло. Я коментую ці два рядки: add_header Strict-Transport-Security "max-age=86400; includeSubdomains"; add_header X-Frame-Options DENY;з nginx-фрагментів, а потім він працював відразу.
Зет

NGINX, важливо сказати де , всередині місця розташування?
Пітер Краус

Пітер Краус, що ти хочеш?
rubo77

14

Оскільки рішення насправді не згадувалося для серверної сторони:

Потрібно встановити такі речі (наприклад, від apache), це не найкращий варіант, оскільки це дозволяє у всьому, але, побачивши, що ваш сервер працює правильно, ви можете легко змінити налаштування.

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

5

не дуже ... я звик

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

Це виглядає як рішення, але чи це порушення безпеки?
Йогурту

1
Це НЕ дуже хороша ідея , щоб відключити ту ж політику походження для вашого сайту , якщо ви точно не знаєте , що ви робите. Ви не повинні дозволити домен, який відрізняється від вашого, вбудовувати вміст. Дивіться codecademy.com/articles/what-is-cors та подібні підручники.
slhck


2

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

Для отримання додаткової інформації: 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");
?>

5
Це життєздатне рішення використовувати сторінку після її завантаження? Чи зможу я взаємодіяти зі сторінками після первинного завантаження? Чи не кожен запит домену повинен бути проксі, щоб використовувати вміст після його завантаження?
Тимофій Гонсалес

0

Для цього вам потрібно узгодити розташування у вашому апачі або будь-якій іншій службі, яку ви використовуєте

Якщо ви використовуєте 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>

0

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

Веб-сайт, який видає заголовку HTTP X-Frame-Optionsзі значенням DENY(або SAMEORIGINз іншим походженням сервера), не може бути інтегрований у IFRAME ... якщо ви не зміните цю поведінку, встановивши плагін браузера, який ігнорує X-Frame-Optionsзаголовка (наприклад , Ігнорувати заголовки X-Frame Chrome) ).

Зауважте, що це зовсім не рекомендується з міркувань безпеки.


0

ви можете встановити параметр x-frame у веб-конфігурації веб-сайту, який ви хочете завантажити у iframe, як це

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

якщо я хочу відкрити stackoverflow, де я можу знайти веб-конфігурацію? це не для сервера?
irum zahra

-1

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

Можливо, ви можете створити файл PHP, який завантажує вміст цільової URL-адреси та iframe, що це URL-адреса, це повинно працювати безперебійно.


1
"Ви можете, ймовірно," потім опублікуйте це як коментар, якщо це не відповідь
MK

Що робити, якщо виявиться відповідь МК
Сушант Чаудхарі

Тоді це пропозиція, яка спрацювала, а не конкретне рішення, тому її слід розмістити як коментар
MK

-2

Ви можете зробити це в конфігураційному файлі рівня екземпляра tomcat (web.xml), щоб додати "фільтр" та відображення фільтрів "у файл конфігурації 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>

-3

Якщо ви дотримуєтеся xml підходу, то нижче код буде працювати.

    <security:headers>
        <security:frame-options />
        <security:cache-control />
        <security:content-type-options />
        <security:xss-protection />
    </security:headers>
<security:http>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.