以下に概要を説明するアプリケーションがあります。 UIは安全なドメインhttps://aaa.comから提供され、同じドメインのスクリプトをホストします。IFRAMEを介したpostMessageによる安全なチャネル
クライアントサイトhttps://client.comをIFRAMEにロードします。このサイトは信頼できるものではなく、悪質なXSSが含まれている可能性があります。一般に、コード品質はアプリケーションよりも低い可能性があります。
サイトでは、2番目のドメインhttps://bbb.comから信頼できる別のスクリプトが読み込まれます。このスクリプトは、必要に応じてhttps://aaa.comから作成することもできます。 aaaとbbbスクリプトはaaa.comからREST APIを呼び出し、そのためのセキュリティトークンが必要です。セキュリティトークンは、ドメインaaaの一番上のウィンドウからUIにログインして取得します。
我々はIFRAMEに私たちのスクリプトの民間閉鎖にブラウザウィンドウ内のプライベート閉鎖(scriptA.js)からセキュリティトークンを渡すために安全なチャネルを確立する必要があります(scriptB.js)
クライアントとしてサイトが異なるドメインである場合は、スクリプトの通信にpostMessage APIを使用する必要があります。理想的には、「こんにちは、私はscriptBです。この鍵で暗号化されたトークン(その単一のイベントに対して生成された非対称暗号化公開鍵)を私に送信し、悪意のあるXSSが読むことができない暗号化された鍵をscriptAに送ります"
しかし、悪意のあるXSSは、同じドメインに座っているのでscriptBであることを偽って、そのメッセージを自分の鍵で早く送信し、応答からトークンを聞くことができます。
問題は、client.comやその他のドメインからロードされたXSSからではなく、https://bbb.comからロードされたスクリプトから送信されたscriptAで要求メッセージを確認できるかどうか、またはその他の安全な通信方法scriptAからscriptBにトークンを安全に渡すために使用できます。
提案がありますか?