2

この Web アプリケーションには、uniqueid (64 ビットの int autoincrement フィールド、キー)、token (64 バイトのバイナリ フィールド)、および accountid の列を持つデータベース テーブルがあります。

「Remember Me」にチェックを入れてログインすると、ランダムなトークンが生成されます。次に、このトークンの SHA-512 ハッシュがデータベースに挿入され、生成された uniqueid が取得されます。uniqueid とハッシュされていないトークンを含む Cookie がクライアントに送信されます。

ユーザーが Cookie を含むページにアクセスするたびに、Cookie の uniqueid とそのトークンの SHA-512 ハッシュがデータベースに対してチェックされます。uniqueid に一致する行があり、その行のトークン ハッシュがトークン ハッシュと一致する場合は、行のアカウント ID を使用してユーザーをログインします。Cookie による認証試行ごとに、古い uniqueid を使用する行を削除し、認証が成功した場合は、新しいランダム トークンを生成します。次に、このトークンの SHA-512 ハッシュがデータベースに挿入され、生成された uniqueid が取得されます。uniqueid とハッシュされていないトークンを含む Cookie が、認証に成功したクライアントに送信されます。

ここで説明するテクニックも使用します。失敗したすべての Cookie 認証では、Cookie が空白の値に設定され、有効期限が過去のある時点に設定されます。

この方法は、Cookie に関するいくつかの問題に対処できると思います。すなわち:

  1. データベース内のトークンはハッシュされるため、攻撃者はデータベースへの書き込みアクセス権を持っていない限り、すべてのユーザーの Cookie を偽造することはできません。

  2. ログイン認証情報は Cookie に保存されないため、ユーザーのアカウント名の代わりに一意の ID が使用されます。

  3. Cookie が認証されるたびにランダムなトークンが生成されるため、攻撃者が Cookie を盗んだ場合、ユーザーが記憶されている間ではなく、ユーザーが次にログインするまでのみ有効になります。

  4. アプリケーション全体で HTTPS を使用しているため、Cookie を盗聴するのは困難です。

ユーザーが記憶したい期間を指定できるようにすることで、セキュリティをさらに強化できます。有効期限は、uniqueid とトークンを格納する同じデータベース テーブルに格納されます。新しい Cookie が作成されるたびに、この有効期限が Cookie と共に送信されます。サーバーが期限切れと見なした Cookie を使用してユーザーがログインしようとしたが、クライアントがまだ保持している場合、ログインは拒否されます。

このソリューションはかなり安全だと思いますが、この方法を設計したときに落とし穴や見落としたことはありますか?

ソース:

データベース内のハッシュ トークン

アカウント名を Cookie に保存せず、認証ごとに新しい一意の ID を使用する

4

1 に答える 1

1

セキュリティに関して言えば、妥当性は常に相対的なものです。:) 直面している脅威に対して適切であると考えるのであれば、それは合理的です。とはいえ、それが私のアプリであり、実際に攻撃から保護する必要があると信じていた場合に私が行ういくつかのことは次のとおりです...

  • 元の認証イベントに関連付けることができるトークン / b/e に何かをスタンプし、すべての Cookie 操作でそれをログに記録します。このようにして、(いつ :)) 人々がハッキングされ、何がいつ起こったのかを把握したい場合に相関を行うことができます。
  • b/e では、システムの機能として「すべての未処理のトークンを無効にする」を必ず実装してください。次に、これをすべての「疑わしい」イベントに自動的に配線します。
  • 地理情報を Cookie に保存する / Cookie に対応する行を含む b/e に保存します。それをログに記録することから始めます。最終的には、もっとやりたいと思うようになります。ハッキングされた人々を研究すれば、このデータを使ってできることはどんどん増えていくでしょう。データがなければ学習できません。
  • 計器類が多い。たくさんの楽器。何年も保管してください。すべてがイベントを取得し、そのイベントが発生したときにそのイベントで知っているすべてをログに記録します。何がいつ起こったかを把握するために使用できる優れた視覚化/検索ツール。

もちろん、他にもできることは無数にありますが、これは単なるスターター リストです...

于 2012-10-20T16:36:04.247 に答える