質問

クラシックの実装を検討しています 「私を忘れないでください」チェックボックス 私のWebアプリ上で、認証されたユーザーが私のWebサイトに戻ったときに「記憶」できるようにします。

Gメール, フェイスブック 他の人もこの種の機能を持っていますが、それがどれほど安全であるかはわかりません。

のような Java フレームワーク スプリングセキュリティ 「ハッシュベースのトークンアプローチ」を使用します。生成されたトークン (ユーザー名、パスワード、有効期限、および privateKey を使用) は、クライアントの Cookie の「token=567whatever567」に保存されます。このトークンは、ユーザーが次回戻ってきたときに再認証するために再利用されます。

私が懸念しているのは、ログイン プロセスが https 接続で行われたとしても、後続のすべての http リクエストで Cookie が暗号化されずにネット上に送信されるということです。

基本的に みんな トークンを読み取り、それを認証に再利用できます。

Gmail または Facebook がこの機能をどのように実装しているかを調べようとしています。FB では「presence=DJ267619445G09H0L15228675....」のような Cookie が確認でき、その他は Gmail で確認できます。
他のユーザーになりすまそうとする誰かから保護するために、他のトリックを使用しているのかどうかはよくわかりません。

次のようなものを使用して自分になりすましてみます カール ユーザーを記憶するために特定のトークンのみを使用しているかどうかを確認します。
もしそうなら、それは大きなセキュリティ問題のように私には思えます。おそらく Facebook ではなく (私は気にしません)、「」を設定しない場合は Gmail を使用します。常に https を使用する' http 接続が使用され、暗号化されていないトークンがインターネット経由で送信されます。
どう思いますか?

また、Facebook のユーザー名とパスワードのフィールドが http (https ではなく) で公開されていることにも気付きました。この点に関して、私も疑問に思っています:http 経由でユーザー名/パスワード フィールドを公開するすべての Web サイトは「本質的に」安全ではありません。リクエストが http 経由で送信されると、「認証情報が世界中に公開される」問題を解決できる「https へのリダイレクト」は存在しません。

ありがとう

編集:
私の心配は十分に根拠がありました http://codebutler.com/
おかげ ファイヤーシープ クリエイターの皆さん、問題を指摘してくれました!!!

役に立ちましたか?

解決

これは覚えて、私を実装するために、このようなAの問題ではありません。何をする必要が長いためにセッションを存続さ(と長続きするクッキーを設定)することです。でも、Gmailは一定期間後(私はそれが二週間か月だと思う)あなたをログアウトします。しかし、あなたは長く開い同じセッションを維持することは、それにハイジャックする可能性を増加させることを実現する必要があります。対策として、あなたはあなたのセッション識別子の強度を高める必要があります。セッションIDはクッキーにあるものである(一般的に、いくつかのソフトウェアに見られるように、またはURIに「file.php?PHPSESSID = 1234 ...」)。

キーは、強力なセッション識別子を維持することです。たとえば、Gmailで、あなたは

と同様の値を持つクッキーGXを持っています
DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

セッション識別子がとても強いので、サイトはどこにでもHTTPS使用しているため、セッションハイジャックは、ほとんど不可能である理由。誰も推測していないか、そうでない場合(そのため、あなたのセッションにハイジャックすることはできません)あなたのセッションIDを取得することができます。ざっと見では、セッション識別子は、上記の強さの多少〜1250ビット、1 * 10 ^ 376の様々な可能性を持っているようです。誰もそれを推測することができます。

もちろん、まだセッションにハイジャックに常に潜在的な方法があるでしょう。たとえば、XSSの脆弱性は、クッキー、したがって、あなたのセッションIDを取得するには、ドアの道を開くが、これはあなたのセッションがどのような方法で故障ではありません、そして「覚え-私を」とは何の関係もありません。

  私はクッキーがネット上で暗号化されずに送信されるすべての後続のHTTP要求にログインプロセスは、HTTPS接続の下で起こった場合でも、という事実を懸念しています。

あなたはHTTPSでの真の間にクッキーsecureフラグを設定した場合はHTTP経由でサイトにアクセスする際に

は、クッキーが送信されることはありません。 HTTPSのみのサイトのために行うために不可欠です。

一般的に、人々は唯一のログインページ、間違っているためにHTTPSを使用するように見えます。 1本当に心配ならば、彼はすべてのページ上でHTTPSを使用する必要があります。それ以外の場合は、すべてのセッションハイジャックの試みを阻止することは不可能です。

なぜ、多くのまだちょうどログインの一部にHTTPSを使用していますか?おそらく彼らはステークスに何があるか理解していないため、またはそれはあまりにもCPUの重いですので、どこでもHTTPSを使用します。しかし、それがためにHTTPSを使用することをまだ良いのログ-に比べてどこでもそれを使用しない - それは(これだけのセッション識別子がログオン時に、後からではない実際の資格情報を盗まれたことができます)の資格情報を暗号化しますので、
  あなたが「常にhttpsを使用」を設定しない場合は、

そうでないかもしれないFacebookの(私はそれを気にしない)が、GmailのでHTTP接続が使用され、それがインターネット上であなたの暗号化されていないトークンを送信します。   あなたはどう思いますか?

私は、可能な場合、値はすべての場合にHTTPSをデフォルトにすべきだと思います。 HTTPSを使用していない理由として唯一の本当の理由はお金(=パフォーマンス/ハードウェア)です。

他のヒント

一般にリプレイ攻撃と呼ばれます。攻撃者は、同じ認証情報を使用してリクエストを再実行します (例:Cookie) を盗んで、あなたになりすますことができます。XSS 攻撃はこれのバリエーションにすぎませんが、防止可能です (例:HTTPOnly を使用します)。

ほとんどのリプレイ攻撃を軽減する唯一の方法は、あらゆる場所で https を使用することです。そうすれば、ほとんどの覗き見は避けられるはずです。

がある たくさんの予防テクニック あまりにも。

ソフトウェアでハッキングするよりも優れた仕事をするハードウェア デバイスもあり、その過程でサーバーの速度が低下するため、おそらく間違った判断をすることになります。特殊なハードウェアは、リアルタイムでリクエストを追跡し、同じトークンが多くの異なる IP で同時に使用されていることを判断するというはるかに優れた仕事を実行でき、人間の 1 人のオペレーターがリクエストできるよりも速く実行できます。

ASP.NET 2.0 以降では、フォーム認証を使用するときに、次のように指定できます。 requireSSL='true' https 接続が行われた場合にのみブラウザーが認証 Cookie を送信する必要があることを示します。見る このmsdnの記事 フォーム認証の保護の詳細については、「フォーム認証の保護」を参照してください。


許可しない唯一の理由 remember me 銀行業務または同様のアプリケーションの場合です。そうでない場合は、いくつかの簡単なルールに従ってください。

  1. あなたが持っている場合 remember me, 、Cookie に将来最大 30 日間の有効期限を設定し、値をスライドさせません。ユーザーに月に一度ログインを強制するのは、それほど悪いことではありません。
  2. 機密性の高い操作 必要とする パスワード。請求書、クレジット カード、またはアカウントの詳細を更新するとき いつも ユーザーのパスワードを再要求します。通常、最も可能性の高い悪用の形態は、その人が使用しているのと同じコンピュータを介したものですが、盗まれた認証 Cookie 自体が大きな害を及ぼすこともありません。残高は表示されますが、何も転送することはできません。
上に作られた最もコメントに同意します。あなたがセキュリティを心配している場合は、あなたがすべき -

A)を使用するHTTPSを通して。 のhttpを参照してください - でも、Gmailは最近、デフォルトでHTTPSを使用してに切り替え://gmailblog.blogspot.com/2010/01/default-https-access-for-gmail.htmlする

b)は、HTTP接続を介してそれを送るからブラウザを防ぐために、あなたのセッションクッキーにsecureフラグを設定します。

アプリケーション内の

C)修正XSS。あなたはXSSの問題を持っている場合は、「私を覚えている」の実装は、常に安全でないことになるだろう。参照OWASP XSS防止チートシートます。

セッション識別子を含めIPアドレスが助けに行くのではありません。これを行うと、ほとんど役に立たない「私を覚え機能」を行いますと、それははるかにセキュリティを追加しません。私は、Googleがそのセッション識別子にIPアドレスを入れていない確かに知っています。

完全に安全なサイトを作るための唯一の方法は、どこでも、HTTPSを有効にすることです。あなたは正しい、クッキーを盗聴することができ、後に偽装するために使用されています。

セッションハイジャックのカップルの方法があります。 A>は、そのようなセッションを開いて、クライアントのIPアドレスを格納するように。追加データも、自動ログイン機能せず、セッションを確認するために、サーバー側に保存されている必要があります。これは、(トークンのためにナンスして使用することをお勧めしますまたは非秘密データの少なくともベースにそれをで)ではなく、攻撃者のようにハッシュされたユーザー名とパスワード、より考えられるハッシュされた値が与えられた認証情報を見つけるために攻撃を仕掛けることができます。

あなたは、FacebookやGmailやおそらく他のサイトのログインフォームのソースを見ると

は、ログインフォームのアクションは、ログインが成功したら、次に非セキュアページにリダイレクトされ、HTTPSを使用します。

1 /場合は、ユーザチェックが「私を覚えている」:IP、ブラウザ、OS、言語など...そして、あなたが彼のIDを持つ彼のクッキーで、このハッシュを書く:あなたは自分のコンピュータに関するあらゆる情報のハッシュを保存します 2 /ユーザーが帰ってきたとき、あなたは彼の新しいハッシュを計算します。あなたは、受信したクッキーの値、および(指定されたidの)データベース内の値で、この値を比較します。彼らはすべて対等である場合には、ユーザーを認証することができます。

タグ?それは明らかです あなたはXSS攻撃(クッキーを盗むために最善の方法)

を持っている場合は、

HTTPSは何もできませんでした

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top