Понимание и работа с CSP, iframes и ancestors

Мы установили Discourse на site1. Мы являемся владельцами/администраторами site2.tld и хотим получить доступ к форуму через iFrame со страницы на этом домене. Я не особо разбираюсь в тонкостях CSP, поэтому буду благодарен за помощь.

Я не хочу отключать ограничения для предков, но временно снял галочку с ограничения CSP для frame ancestors:

image

Вот текущий HTML:

<iframe
  style="position:absolute;width:100vw;height:100vh"
  src="https://forum.site1.tld">
</iframe>

Это всё ещё приводит к ошибке:

Firefox не может открыть эту страницу
В целях безопасности forum.site1.org не разрешает Firefox отображать страницу, если она встроена другим сайтом. Чтобы просмотреть эту страницу, откройте её в новом окне.

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

Есть какие-то предложения или вопросы?

Спасибо!

Кто-нибудь ещё встраивает свой Discourse с сайта1 на сайт2? Спасибо!

Мы не рекомендуем и не тестируем полное встраивание Discourse в другой сайт с помощью iframe.

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

Понял. Спасибо!

Понимание долгосрочных последствий: мы временно отключили CSP, но всё ещё получаем предупреждение CSP от Firefox. Требуется ли перезапуск?

Вот описание приложения и задачи. Возможно, существует простое решение…

Есть один сервер Discourse и, как обычно, любое количество учётных записей пользователей и гостей. Зарегистрированные пользователи имеют приложение, в котором размещён локальный веб-сервер. В этом приложении создаётся веб-страница, доступная из локального браузера по адресу http://192.168.1.1:8080. Эта страница предоставляет доступ к форуму через IFrame.

У нас нет контроля над подсетями, обслуживающими контент, поэтому IP-адрес может быть любым из распространённых NAT/DHCP. Однако мы полностью контролируем следующее:

  • Установку и сервер Discourse.
  • Контент, который предоставляется.
  • Порт обычно 8080, настраивается пользователем, но никогда не будет 80 или 443.
  • Поскольку это локальный контент и не критичный для миссии, он не защищён SSL.
  • Пользователи должны иметь учётную запись Discourse и должны войти в систему для получения прав на запись.

Что касается безопасности:

  • Публичный форум доступен из сети через имя хоста.
  • Доступ из сети, конечно, всегда защищён SSL.
  • Никто не может создавать контент форума, если не выполнен вход в систему.
  • Таким образом, локальная страница с IFrame предоставляется по HTTP, но источник IFrame — HTTPS://forum.site.tld. (Это различие протоколов может быть причиной невозможности доступа к форуму даже при отключённой CSP.)
  • После запуска браузера пользователь для доступа к локальному серверу должен ввести пароль. Мы могли бы включить SSL для этой страницы, если потребуется, чтобы обеспечить согласованность между этой родительской страницей и IFrame, ведущим на защищённый SSL форум.
  • У нас нет и не планируется использование скриптов для взаимодействия с Discourse через IFrame. Всё, что мы хотим сделать, — разместить форум в контейнере.

Вот несколько случайных идей, которые могут не иметь смысла:

  1. Разрешить пользователям получать API-ключ со страницы своей учётной записи Discourse, который они могут вставить в приложение, после чего он будет передан в Discourse через cookie или иным способом. Это подтверждает, что, хотя пользователь не соответствует требованиям CORS или CSP, у него есть авторизация для доступа к ресурсам.
  2. Заставить приложение внедрять токен в URI IFrame, ведущего к Discourse. Одновременно использовать API-вызов, чтобы разрешить Discourse входящие соединения с этим токеном. (Да, это потребует программирования.)
  3. Становится ещё более неловко… Создать страницу на сайте сообщества, которая открывает IFrame для контента подсети и ещё один IFrame для форума. Этот сайт может быть авторизован для доступа между источниками.
  4. Сдаться в попытках обойти политики и использовать target=window для открытия Discourse вне окна приложения.

Не прибегая сразу к варианту 4… есть ли идеи? Спасибо!