1

実装に取り​​掛かる前に、stackoverflow コミュニティで実行したい Cookie セキュリティについて簡単な質問がありました。サイトにユーザー サインインを実装するのはこれが初めてであり、アカウントが危険にさらされることを心配する必要がないように、セキュリティに細心の注意を払いたいと考えていました。

これが私の仮想のセキュリティ ソリューションです。

  • ユーザーはサイトにサインアップし (電子メール登録、Facebook でのログインなど)、ユーザー ID 番号が割り当てられます。この番号は公開されており、ユーザーのプロフィールにアクセスしたり、投稿でそれらを参照したりするために使用できます。
  • 登録時に、ユーザーの情報がデータベース (Google Fusion Tables でホストされている) に保存されるため、ランダムに生成された ROWID もユーザーに割り当てられます。この ROWID 番号はユーザーから隠され、公開されることはありません。
  • ユーザー ID は ROWID 番号に対して暗号化され、この番号はユーザーのコンピューターの Cookie に保存されます。他のユーザーに表示されることはありません。理論的には、これはユーザーのみが表示できます。

このソリューションでは、「秘密」キー (ROWID 番号)、「消費者」キー (Cookie に保存)、および公開参照 ID (ユーザー ID) を使用できます。もちろん、これらはすべて、サイトがすばやくアクセスできるデータベースにまとめられます。これは、適切なレベルのセキュリティを提供する計画のように聞こえますか、それとも他に考慮すべきことがありますか?

4

2 に答える 2

5

XSS などによる Cookie の盗難に対する保護を強化するには、IP アドレスごとに一意の Cookie を発行し、その IP アドレスからのみ Cookie を使用できるようにすることを検討してください。Cookie をデータベースに保存している場合、複数の Cookie が同じユーザーにマッピングされるため、状況が複雑になる可能性があります。

これらの問題を回避する方法は次のとおりです。

Set-Cookie: userName=Alice; authCode=eeba95a4...

ここで: authCode= HMAC (ROWID、ユーザー名 + ipAddr)

この Cookie を受け取ったら、データベースでユーザーを検索し、リクエストの ROWID と IP アドレスを使用して、Cookie の authCode を再計算/検証します。データベースに Cookie を保存する必要はありません。

追加のクリプト ポイントについては、saltパラメータをミックスに投入します。

Set-Cookie: userName=Alice; salt=59843...; authCode=eeba9...

ここで: authCode=HMAC(ROWID, ユーザー名 + ipAddr + ソルト)

ソルト値は、生成するすべてのクッキーに対してランダムに生成されます。秘密にしておく必要はありません。

于 2011-12-25T22:44:48.180 に答える
1

これは良い質問です。まだ答えがないので、試してみます。私が見る限り (私は暗号の専門家ではありません)、これは少なくとも理論的には妥当なようです。問題が 1 つあります。それは、悪意のあるユーザーがコンシューマー キーを取得した場合 (これはまったく保護されていません)、ユーザー ID を既に知っているため、ROWID をブルート フォースしようとする可能性があることです。したがって、暗号化する前に、少なくとも何らかのソルトをユーザー ID に追加する必要があります。また、「コンシューマ」キーの ccokie は、暗号化されていない接続を決して移動しないように、安全なものとしてのみ渡す必要があります。

しかし、それはすべて、さまざまなキーを何に使用する予定かによって異なります。

于 2011-12-23T16:09:37.673 に答える