コンテキスト:
2つのWebサーバーServerA(LAMPスタック)とServerB(ASP.NETスタック)があります。テクノロジーが(うまくいけば)問題ではないと思います。どちらのサーバーも認証を必要とし、おそらくこれらの作業を適切に実行しています。そうでない場合は、この質問の範囲外です。
タスク:
Iframeコンテンツを含むページを実装したいと思います。 ServerAは外部コンテンツを提供しますServerBは内部コンテンツ(iframe)を提供します。サーバーは異なるドメインにあります。ユーザーXがServerAにログインしてページに移動すると、iframeでServerBからのpersonalおよび機密コンテンツが表示されます。コンテンツは、サーバーBのユーザーXのIDに属しています。
提案された解決策:
。
<img src="https://serverb.com/dummy.any?parameter=crypted_username_and_date_using_the secret" style="display:none;" />
ServerBでは、dummy.any urlへのリクエストを受信すると、パラメータを復号化し、いくつかのチェックを行ってから、応答でcryptedcookieをユーザー名とともに含み。暗号化キーは共有シークレットにすることも、ServerBのプライベートシークレットにすることもできます。
ServerBでは、リクエストが内部ページ(iframe)に受信されたときに、Cookieが含まれている必要があります。Cookieが存在し、userXである場合、このまったく同じドメイン( https:// serverb )に設定されたものが存在し、5分の時間枠で問題がないとすると、ServerBは認証サブシステムを使用してプログラムでユーザーにログオンします(パスワードは提供されません)。 (認証サブシステムは、独自のCookieまたは何かを設定します。これは、私たちの観点では、うまくいけばブラックボックスです)
私は開発者であり、セキュリティの専門家ではないことに注意してください。そのため、セキュリティホールを実装する前に質問します。
これが答えになるかどうかはわかりませんが、コメントを入力するには多すぎます...
あなたが提案していることは、いくつかの仮定をもって、私には問題ないように見えます:
校長としてはうまくいくと思います。私が考えることができる唯一のことは、ユーザーがサーバーBに既に存在するサーバーAのアカウントを何らかの方法で登録できるかどうかですが、きっとあなたはそれを考えたと思います。
明らかに他のセキュリティ問題(サーバーのいずれかに脆弱性、通常のWeb攻撃など)がある場合、すべての賭けは無効になります。
私にとっての問題は、セッション管理がない場合、serverBへの要求がリプレイ攻撃を受けやすいことです。うまくいけば、サーバーとクライアント間のすべての通信は、認証だけでなくHTTPSを介して行われます(そうでない場合、これは大きなセキュリティ問題です)。これにより、傍受の可能性が減少します。ただし、トークンがリモートサーバーで有効になるまでに5分は非常に長い時間です。また、サーバーのクロックが同期していることを確認する必要があることも意味します。
Iframe URLで単一のタイムスタンプがあり、有効期限が切れるトークンを渡すだけの方が簡単ではないでしょうか?
別の解決策は、外部ページが要求されたときにserverAがserverBにワンタイムパスワードを要求し、それをiframeのURLに含めることです。しかし、これはそれほど簡単には拡張できません。