2

私は余暇にウェブアプリに取り組んでいます。

これは主にコンテンツを公開/消費することを目的としているため、コンテンツは公開され、http 経由で表示されることが期待されます。また、サードパーティのウィジェットを許可/含むため、http アクセスが必要です (多くのベンダーは https バージョンを持っておらず、https ページでの http の混合コンテンツの問題があります)。これと他のいくつかのビジネス目標のために、サイトの 99% を http で利用できるようにする必要があります。

これまでに実装したロックダウン スキームは次のとおりです。

  • すべてが同じドメインにあります
  • /account および /api の下のすべては、https および https のみの Cookie を介して処理されます。これらの安全なセッション ID のみが、書き込みまたは個人を特定できる資料へのアクセスに使用できます。
  • それ以外はすべて http 経由で処理され、別の http Cookie のセットを使用します。これらの Cookie は主にブラウザベースの JavaScript カスタマイズ用であり、「書き込み」や機密コンテンツの表示用ではありません )

それは私を問題に導きます...

誰かが Web アプリケーションでブックマークやソーシャル アクティビティを実行したい場合は、HTTPS チャネルを介して (HTTPS Cookie などを使用して) 実行する必要がありますが、ブラウザーの同じオリジン ポリシーでは、http と https を 2 つの異なるサーバーと見なします。

私は、HTTP コンテンツから HTTPS サーバーへの API 呼び出しを可能にする効果的な (できれば単純な) 方法を考えようとしています。私が最初に考えたのは、JSONP を使用することでしたが、セッション cookie が必要です。それは私には見えません。

誰か提案はありますか?

4

1 に答える 1

3

あなたのワークフローを理解してみましょう。あなたの HTTP ページは HTTPS サーバーを呼び出す必要があり、HTTP ページはセッション cookie にアクセスします。HTTP ページにアクセスできるようにするためには、応答が必要です。それは正しいですか?

これを行う 1 つの方法は、別の iframe を使用してサーバーと通信するスクリプトをホストし、メイン ページと iframe が HTML5 postMessageを使用して通信するようにすることです。したがって、上記のワークフローを実現する手順は次のようになります。

  1. (シリアル化された)リクエストパラメーターを使用postMessageしてiframeを使用します。
  2. iframe のメッセージ コールバックはリクエストを受け取り、それがあなたのページからのものであることを確認し、(セッション Cookie を渡して) Ajax リクエストをサーバーに送信します。
  3. を使用して、応答が受信され、シリアル化され、メイン ページに送信されますpostMessage
  4. メイン ページのメッセージ コールバックは応答を受け取り、それに対して何かを行います。

これを単一の関数呼び出し内にカプセル化するのは難しくありません。ここで注意が必要なのは、上記の太字部分です。iframe 内のスクリプトが、要求が正しいページからのものであることを適切に確認しない場合、CSRF の脆弱性が生じる可能性があります (悪意のあるページが安全なスクリプトを iframe に埋め込み、要求を送信する可能性があります)。そのときにユーザーが認証されている限り、iframe は要求を受け入れます)。

その問題については、残念ながら私が提案できることはほとんどありません。HTTP ページに HTTPS コンテンツを埋め込むことは、全体としては悪い考えですが、それを行う理由があるため、セキュリティへの影響にも対処する必要があります。

于 2012-05-24T22:31:32.387 に答える