2009-08-16 15 views
11

私は現在、私のWebアプリケーションの1つを考慮に入れています。セキュリティを改善するためのアドバイスが必要でした。Cookieベースの認証を保護する

私は、アプリケーションがASP.netであり、現在の実装では、統合認証を使用してから私を妨げることに注意しましょう。これは、高度なセキュリティを必要とするアプリケーションでもありません。私は自分の拠点をカバーするのが好きです。

私は過去にIDとトークンを保存していました。 トークンは、ユーザーのIDとユーザーのSaltのハッシュです(認証情報の値を再利用します)。 ユーザーがサイトにアクセスすると、トークンに対してIDがチェックされ、それに応じてIDが確認されます。

ここに大きな穴があることが私に起こります。 理論上、誰かが塩分値を手にしているのであれば、ハッシュアルゴリズムを推測し、それが入るまでIDを繰り返し処理する必要があります。これが起こるとは思っていませんが、まだ間違いのようです。

適切にユーザーのクッキーが変更されていないことを確認する方法上の任意のアドバイスはありますか?

+0

私が気になることのその部分を追加します。誰かがサイトのsalt値とパスワードハッシュを取得した場合、純粋なパスワード認証ではまったく役に立たないということです。クッキー認証の良い方法は同様のやり方で動作するようです。 –

答えて

10

を行うjavascriptの で設定することはできませんつまり、唯一のクッキーのhttpを作ります成功した場合は、ブラウザーにCookieを送信して後続の要求を保管して送信します。攻撃者がトークンを取得できた場合(期限切れになる前に)、ユーザーを偽装することができます。

クッキーと認証プロセスは、常にHTTPSセッションを介して行われるべきである。このためです。攻撃者がクッキーを保持しなければならない真の唯一の方法は、エンドユーザーのコンピュータ上で傍受することです。もし可能ならば、おそらくキーストロークロガーをインストールして、ユーザーのパスワードを取得することができます。

どのような種類のトークンでも、攻撃者が推測するには計算上高価になるほど擬似ランダムであれば問題ありません。私は自分でGUIDを使用します。セッションIDだけでなくクッキーに余分な情報が必要な場合は、GUIDを追加して、おそらくベルトやブレースのアプローチのためにハッシュまたは暗号化することができます。

+0

クッキー認証を使用する場合、クロスサイトスクリプト偽造(CRSF)に注意する必要があります。ブラウザはユーザーのために資格情報を送信しており、ブラウザを攻撃して攻撃者に送信することも可能です。しかし、それはノンスを使って防止/最小化することができます。それはGoogleの詳細情報です。 – thebiggestlebowski

2

二つの方法:

  1. 対称アルゴリズム(AES)でそれを暗号化します。

それはあなたがそれを解読することができますので、これは良いです。それを解読する必要はないと主張するかもしれません。

  1. ハッシュおよび記号です。この場合も秘密鍵が使用されるため、誰かが正確な内容を知っていても、秘密鍵が必要なため、ハッシュを再現することはできません。

私はおそらく(と以前に持って)オプション#1で行くだろう。

0

なぜハッシュをクッキーに格納するだけでなく、他の擬似乱数も格納しないのですか?次に、データベースと照合してユーザーIDを取得します。

他のもの: ほとんどのウェブサイトはそれを行う方法を認証することです、それはオプションである場合、それはHTTPSのみデータを送信することが

4

最高の方法は、セッションIDをCookie値として保存することです。

ユーザーがログインするたびに、データベースまたはランダムセッションIDを持つ他のセッションストアにレコードを作成します。 IDをクッキーに入れてください。後でCookieが表示されたら、データベースからすべてのユーザー情報を取得できます。

このアプローチにあり、次のような利点、

  1. それは非常に安全です。セッションIDは単なる乱数です。キーや塩の漏れを心配する必要はありません。
  2. クッキーはサーバーから簡単に取り消すことができます。あなたがしなければならないのは、セッションレコードを削除することだけで、IDは役に立たなくなります。
  3. クッキー値は実際には短くてもかまいません。

これがうまくいかない場合は、暗号化を試してください。ハッシュは私の最後の選択でしょう。ハッシュ自体は役に立たない。ユーザーIDやその他の情報は、別のCookieに明示的に格納する必要があります。あなたはユーザー情報を公開することになりました。

+1

zz coder:ハッシュした場合、UserIDを公開する必要があります。それは一般に重要ではないので、それを公開するのに問題はありません。セッションIDのアプローチは問題ありませんが、あなたが言うように、DBに何かを保存する必要があります。これはかなり長い間生きなければならない情報なら、これは望ましくないかもしれません。 –

関連する問題