2009-11-21 3 views
5

クライアントブラウザでユーザーパスワードをハッシュしてWebサーバーに送信する最善の方法は、プレーンテキストパスワードではなく、ハッシュのみが出力されるようにすることです。クライアントブラウザでのパスワードハッシュ

EDIT:HTTPを使用していると仮定すると(ないHTTPS)

+7

安全なチャンネルでハッシュを送信する予定がある場合、またはチャレンジ/レスポンスメカニズムの一部であることをお祈りします。そうでなければ、これはプレーンテキストでパスワード自体を送信するよりも安全です... –

+1

@Roger Lipscombe、このメソッドは、実際にはユーザーのためのわずかな改善かもしれません。セキュリティで保護されたチャネルがない場合でも(SSLのみが動作し、JSの代替手段は無防備です)、少なくともハッシュはサイト固有のものになります。もちろん、ハッシュをユニークにするには、*塩漬けする必要があります*。 – Inshallah

+1

ハッシュをサイト固有のものにすることを許可しました。ユーザーが複数のサイトで同じパスワードを使用する場合に便利です。同じサイトに対する再生を妨げません。 ハッシュが塩漬けされている場合は、塩がクライアントからサーバーに移動する必要があります。以前よりも安全ではありません。それ以外の場合は、チャレンジ/レスポンスです。 –

答えて

4

使用ハッシュを計算するためのJavaScript。 JSでSHA-1ハッシュを計算する方法の例については、thisを参照してください。

自分自身をJavascriptに依存させると、JSが無効になるとすぐにシステムが機能しなくなることに注意してください。 HTTPSを使用する必要がある場合は、独自の問題があります(ブラウザですぐに受け入れられるようにするには、証明書にはお金がかかります)。

1

ブラウザでJavaScriptが有効になっているわけではありません。プレーンテキストのチャンネルにハッシュを送る考えは十分に安全ではないと思います。

SSLセキュリティで保護された接続を検討することをお勧めします。

2

これを試してみるjQuery encryption plugin好奇心の念から、SSL/HTTPSの使用とサーバー側での暗号化で何が問題になっていますか?

+0

私はプレーンなHTTPの作業を想定しています – Andy

1

のJavaScript側jQueryの暗号化ライブラリーのような暗号化は、盗聴者を停止します。しかし、MITM(Man-in-the-Middle)は引き続き発生する可能性があります。 SSL/TLSは、共有ホスティング(専用IPなし)やサイトで大量のトラフィックを受信して​​いるだけで、すべての接続(JS、CSS、HTMLなど)を単純に暗号化できない限り、 )。

1

なぜこれをやってもらえませんか?効果的に、パスワードハッシュはパスワードになり、ハッシュを傍受する中間者がそれを使用して認証し、ユーザーとして何らかのアクションを実行することができます。一方、中間者を信じていない場合は、単にパスワード自体を送信しないでください。

+0

チャレンジレスポンスは盗聴から保護します。データを変更することはできませんが、それを聞くだけです。トークンは1回限りであるため、盗聴者は常に遅れてトークンを使用しません。 – Tower

+0

はい、それは本当です。私は盗聴者だけがパスワードを発見するのをやめさせるでしょう。しかし、その場合は、自分でロールするのではなく、HTTPダイジェスト認証を使用するだけです。 – erickson

1

なぜパスワードをハッシュするのですか?ハッシュが得られれば、使用するのが難しいです。

システムのハッシュが公開されている場合、このモデルではど​​うなりますか?攻撃者は単にそれらをサーバーに送信し、ユーザーとして認証します。

これは、パスワードのハッシュがクライアントではなくサーバー上で常に発生する理由です。

関連する問題