CSP、iframe、ancestors の理解/連携

site1 に Discourse をインストールしました。site2.tld を所有/管理しており、そこにあるページから iFrame を介してフォーラムにアクセスしたいと考えています。私は CSP の専門家ではないため、支援をお願いします。

ancestor 制限を無効にしたくはありませんが、一時的に frame ancestor CSP のチェックを外しました。

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

これでも以下のようになります。

Firefox はこのページを開けません

セキュリティのため、forum.site1.org は、他のサイトに埋め込まれている場合に Firefox でページを表示することを許可しません。このページを表示するには、新しいウィンドウで開く必要があります。

Embedding を見ましたが、その機能は別の目的を果たしているようです。単一のトピックに限定したくはなく、ユーザーはログインしません。当初は、ユーザーがログインしなくても、フォーラム全体が読み取り専用で利用可能であれば問題ありません。

提案はありますか?質問はありますか?

よろしくお願いします!

サイト1のDiscourseをサイト2に埋め込んでいる方はいらっしゃいますか?よろしくお願いします!

iframe を介して Discourse を別のサイトに完全に埋め込むことは推奨しておらず、テストも行っていません。

代わりに、各サイトを独自のドメインで運用し、リンク、シングルサインオンを使用し、Discourse のスタイルをメインサイトのビジュアルに合わせることをお勧めします。

「いいね!」 2

承知しました。ありがとうございます!

CSP を一時的に無効にして長期的な影響を理解しましたが、Firefox から CSP の警告が依然として表示されます。再起動が必要ですか?

ここにアプリケーション/チャレンジがあります。簡単な解決策があるかもしれません…

Discourse サーバーが 1 つあり、通常どおり、無数のユーザー アカウントとゲストがいます。登録済みユーザーは、ローカル Web サーバーをホストするアプリを持っています。このアプリ内に Web ページが作成され、ローカル ブラウザから http://192.168.1.1:8080 としてアクセスされます。その Web ページは、IFrame を介してフォーラムを提供します。

コンテンツが提供されるサブネットを制御することはできません。そのため、IP は一般的な NAT/DHCP のいずれかになります。ただし、次のものについては完全に制御できます。

  • Discourse のインストールとサーバー。
  • 提供されるコンテンツ。
  • ポート番号は通常 8080 で、ユーザーが構成可能ですが、80 または 443 になることはありません。
  • これはローカル コンテンツであり、ミッション クリティカルではないため、SSL で保護されていません。
  • ユーザーは Discourse アカウントを持っている必要があり、書き込みアクセスには Discourse にログインする必要があります。

セキュリティに関しては:

  • パブリック フォーラムはホスト名経由でネットワークからアクセスできます。
  • ネットワーク アクセスはもちろん常に SSL で保護されています。
  • ログインしていない限り、誰もフォーラム コンテンツを作成できません。
  • そのため、はい、IFrame を持つローカル ページは HTTP として提供されますが、IFrame のソースは HTTPS://forum.site.tld です。(このプロトコルの違いが、CSP が無効になっていてもフォーラムへのアクセスに失敗する原因となっている可能性があります。)
  • ユーザーがブラウザを起動すると、ローカル サーバーにアクセスするためにパスワードを入力する必要があります。この親ページと SSL が有効なフォーラム サイトへの IFrame との一貫性を保つために、必要に応じてそのページを SSL 対応にすることができます。
  • IFrame を介して Discourse にスクリプトを記述する予定はありませんし、その意図もありません。私たちがやりたいのは、フォーラムをコンテナーにホストすることだけです。

次に、価値がないかもしれないランダムなアイデアをいくつか示します。

  1. ユーザーが Discourse アカウント ページから API キーを取得できるようにし、それをアプリに入力できるようにします。次に、アプリがそれを Cookie またはその他の方法で Discourse に渡します。これにより、ユーザーは CORS または CSP に準拠していなくても、リソースへのアクセス権限があることが確認されます。
  2. アプリがトークンを IFrame URI から Discourse に挿入するようにします。同時に、API 呼び出しを使用して、Discourse がそのトークンで受信接続を許可するようにします。(はい、それはコーディングが必要になります)
  3. さらに不快なことに… コミュニティ サイトに、サブネット コンテンツ用の IFrame と、フォーラム用の別の IFrame を開くページを作成します。この 1 つのサイトは、クロスオリジン アクセスが許可されます。
  4. ポリシーを回避しようとするのをやめて、target=window を使用して、アプリケーション ウィンドウの外に Discourse を開きます。

オプション 4 にすぐに頼らずに… 何かアイデアはありますか?ありがとうございます!