Ифрейм в коде.

Внедрение Iframe в код документа.

Вставляя какой-нибудь внешний объект в код страницы, к примеру, ифрейм с видеоплеером, Вы обнаружите, что ничего не работает, от слова совсем.

Что правильно, так и должно быть.
Вы забыли про Content Security Policy.
Ту самую, что непонятными строчками фигурирует в файле настроек.

Давайте на примере осиливать эту премудрость.
Предположим, нам надо вставить в документ плеер с роликом.
Код самого документа вроде бы затруднений не доставляет:

<?php /* Выше этой строки в файле ничего не должно быть */

   
$_s['title']='Видеоролик в документе.';
   
$_s['content']='
   
<h2>Видеоролик:</h2>
<center>
<iframe
   width="690"
   height="388"
   src="https://www.youtube.com/embed/10byeZV5jcc"
   frameborder="0"
   allowfullscreen
>
</iframe>
</center>'
;

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Запустив такой файл под Наной, мы не увидим никакого плеера и ифрейма.
Но в Консоли разработчика зафиксируется вот такое предупреждение:

В переводе на русский это означает, что Политикой Безопасности Контента сайта запрещено запускать ифрейм с внешним содержимым. Это да, так и есть - в секции frame-src в файле настроек действительно прописано только лишь 'self', то есть движок согласится запускать ифрейм с содержимым только своего домена.

Чтобы не лазить каждый раз в файл настроек, дабы скорректировать там запись CSP, была придумана функция с двумя параметрами:

   add_to_csp('frame-src','site.com'); 

Первым параметром указывается секция.
Та, на которую жалуется Консоль разработчика браузера.
Второй параметр - разрешённый домен.

Добавляется эта функция прямо в документ с ифреймом:

<?php /* Выше этой строки в файле ничего не должно быть */

   
add_to_csp(
      
'frame-src',
      
'https://www.youtube.com'
   
);

   
$_s['title']='Видеоролик в документе.';
   
$_s['content']='
   
<h2>Видеоролик:</h2>
<center>
<iframe
   width="690"
   height="388"
   src="https://www.youtube.com/embed/10byeZV5jcc"
   frameborder="0"
   allowfullscreen
>
</iframe>
</center>'
;

/* Ниже этой строки в файле ничего не должно быть. */ ?>

И теперь это работает:

Кстати, должно быть любопытно, сколько Политика Безопасности Контента заблокировала всевозможной рекламы и следящих модулей в процессе просмотра ролика - Консоль разработчика браузера это всё показывает в красках:

Комментарии:

Видимо, про CSP опять, опять, и опять

С ютубом справились: add_to_csp('frame-src','www.youtube.com'); в нужное место и дядька в каске полетел :) А вот когда в произвольное место страницы вставил код AdSense, вся консоль покраснела. Причина, не иначе, та же.

Какую же волшебную строку для этого басурманского адсенса применить?
Ведь этот случАй всех злее!

Ну так консоль же говорит, в какой секции CSP чего ей не хватает. Вот и дописывайте в CSP запись файла настроек. Чего именно, автор не знает - он рекламу на свои сайты не вешает вообще.

Сергей
09.03.2017 23:21
На сторонних ресурсах на пропускает Нану в ифреймах

В хэдерах сервера на моих сайтах, которые живут на NanoCMS, да и самого nanocms.name, есть строка "X-Frame-Options: DENY". Этот запрет не позволяет показывать страницы сайтов в ифреймах на других ресурсах. Как убрать это ограничение?

P. S. SCP у себя не применяю, из сеттингов этот раздел удалил.

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

На этом эффекте основан так называемый межсайтовый скриптинг, которым и крадутся сессионные и авторизационные куки. В том числе и без всяких усилий - вебмастер видит в статистике своего сайта факт прилинкованности к нему другого сайта, идёт в туда полюбопытствовать, а на линкующейся странице уже ждёт его же собственный сайт в невидимом фрейме, и джава-перехватчик кук и сессий. Если система авторизации сайта недостаточно кошерна, у сайта появляется второй админ. Смайлик.

Поэтому сайт не должен открываться во фрейме, CSP политики должны исключать любые неразрешённые внешние объекты, а система авторизации обязана быть параноидальной. Все три момента - строго облигатуарны.

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

Сергей
01.03.2017 16:14
Не работает ифрейм ютуба

Сделал все по инструкции. Не грузит видео. Если вставить сайт, который стоит по умолчанию в инструкции, то работает. Ошибок со вставкой нет, проверил 100 раз.

Видимо, в CSP не прописаны исключения для ютуба.

Разобрался. Помогла эта статья. Спасибо.

Сергей
17.03.2016 18:39