私は、顧客のすべてのサブスクリプションと私の会社でのメンバーシップを表示するユーザー アカウント「メンバー センター」を持っています。これはhttps://secure.example1.com/membercenter/にあります。
私は実際の会員サイトである別のサイトを持っています。これはhttp://www.example2.com/にあります。(同じ専用サーバーですが、各サイトは異なるドメインにあります。
リンクにユーザーのユーザー名とパスワードを含めずに、メンバーシップ サイトに簡単にログインできるようにしたい。
だから私が思いついたのはこれです:
ユーザーがメンバーシップの [ログイン] リンクをクリックすると、ユーザー ID + UNIX タイムスタンプの md5 ハッシュを作成し、それをユーザー ID とタイムスタンプと共にデータベース テーブルに追加します。
次に、 http://www.example2.com/login? hash=(ハッシュ)にリダイレクトします。
example2 のログイン スクリプトはハッシュを取得し、同じテーブルで検索します。ハッシュが存在する場合、ハッシュと共に保存されているユーザー ID を使用して顧客データベースからユーザー名とパスワードを取得し、それをサイトの既存のログイン関数に渡すと、ユーザーはログインします。
このハッシュ ログイン スクリプトが実行されると、最初に 5 分より古い行が削除され、次に渡されたハッシュ値がチェックされます。ハッシュが見つかった場合は、ユーザーをログインさせ、使用されたハッシュをテーブルから削除します。これは、テーブルに 5 分より古いハッシュが存在しないことを意味します。テーブルにハッシュが残っている (はずである) 唯一の場合は、ユーザーがリンクをクリックした後、secure.example1.com から www.example2.com に移動できなかった場合です (たとえば、インターネットがすぐ右でダウンします)。次に、example2.com を解決する DNS の問題など)。5 分間の有効期限があるということは、そこに座って、リダイレクトされた URL を再読み込みできることを意味します。
ユーザーがリダイレクトされると、ハッシュ値が表示されます。
secure.example2.com からログイン リンクがクリックされるたびに、新しいハッシュ値が計算されて保存されます。
私の質問は...明らかなものが欠けていますか?これをどのように壊したり、ハッキングしたりしますか? 自分のサイトに大きなセキュリティ ホールを作成しただけですか?
ありがとうSOハイブマインド!
編集: これは、www.example2.com にアクセスし、ユーザー名とパスワードを使用してフォームにログインする通常のモデルに追加されます。
EDIT2: tobyhede re: ハッシュのスニッフィングへの応答。攻撃者は、ハッシュが使用されると削除されるため、ユーザーが www.example2.com のログイン スクリプトにアクセスできないようにする必要もあります。それを止めることができた場合、ハッシュも 5 分以内に使用する必要があり、そうしないと自動的に削除されます。
EDIT3: Re: 独自のハッシュを生成する攻撃者: ハッカーは、これらのハッシュをデータベースに挿入し、有効なユーザー ID を含める必要があります (ユーザーは自分のユーザー ID を知りません)。彼らはどうやってそれをするでしょうか?ハッシュは一度だけ使用され、すぐに削除されるため、以下の攻撃が機能するとは確信していません。