3

Webアプリケーションで送信する必要のある情報を理解しようとしています。基本的に、私はWebサーバー、ハッシュされたパスワードとソルトを含むユーザーテーブルを持つデータベース、そしてもちろんjavascriptが有効になっているWebクライアントで実行されているWebアプリを持っています。

ログイン時にユーザーがログインすると、クライアント側でユーザー名とパスワードが入力されます。送信される情報を知りたい。Webクライアントはパスワードをプレーンテキストで送信しましたか、それともjavascriptを使用してソルトなしでパスワードをハッシュし、結果を送信しましたか?または、クライアントはサーバーからプレーンテキストでソルトをフェッチしてから、クライアントはhased password + saltを送信しましたか?

ハッシュし、ソルトでハッシュするための最良の方法は何ですか?MD5はハッシュとして大丈夫ですか?hash(password_plain_text + salt)とhash(hash(password_plain_text)+ salt)はどのようになりますか?ここで、+は文字列の連結ですか?

4

3 に答える 3

6

ブラウザが提供されたデータを送信すると、サーバーと通信しているプロトコルのRFCの要件に一致する可能性が最も高い形式で送信されます。

HTTP接続の場合、ユーザー名とパスワードは平文(つまり、プレーンテキスト)でWebサーバーに送信されます。

HTTPS接続の場合、クライアントによってHTTPS対応サーバーに送信されるすべてのもの(ハンドシェイク後)は暗号化されます。サーバーに到着すると、復号化されます。サーバー側で使用しているソフトウェアスタックが何であれ、これを透過的に処理する必要があります。そのため、データを再び平文で処理することになります。

いずれの場合も、保存しているパスワードを常にハッシュする必要があります。その理由は、パスワードがネットワークを介して(つまり、クライアントとサーバーの間で)通過するときにパスワードを保持しないためです。その理由は、データベース内でパスワードを安全に保つためです。秘密を保持する最も安全な方法は、保持するパスワードを持たないことです。

クライアント側でのハッシュは、選択したハッシュメソッドだけでなく、ソルトメカニズム(および、侵害されたクライアントの場合は実際のソルト値)も公開するため、まったく安全ではありません。

ハッシュするための最良の方法については...まともな安全なハッシュアルゴリズム(SHAファミリーの1つでうまくいくはずです)と動的ソルト(参加日や他のすべての文字など、ユーザーごとに異なるもの)を選択してください彼らの電子メールアドレスの)。より安全にしたい場合は、ハッシュを数回(数千回)ハッシュします。このように、データベース全体を盗まれたとしても、パスワードのごく一部を公開するにはかなりの作業が必要になるため、パスワードを再利用する人の深刻な問題を回避できます。

于 2011-06-08T03:10:59.813 に答える
3

JavaScriptは、送信するように指示したものをすべて送信します。JavaScriptを介してパスワードを明示的にハッシュしていない場合、パスワードはハッシュしているサーバーにプレーンテキストで送信されます。

ただし、クライアント側でハッシュするのは良い考えではないと思います。それは、JavaScriptを見る人にあなたの塩を明らかにするからです。また、JavaScriptが有効になっていないユーザーはログインできません。

サーバーサイドでハッシュします。

セキュリティに関しては、違いはありません。2番目の解決策では、ブルートフォースハッカーがパスワードを見つけるのが2倍難しくなります(1つではなく2つのハッシュを生成する必要があるため)が、誰もあなたのハッシュを知らない限り、それについて心配する必要はありません。

ただし、セキュリティが本当に心配な場合は、SHA256でハッシュしてください。Googleの「md5collisions」でMD5が使用するのに最適なハッシュ関数ではない理由を確認します(これは最速の1つです)。

于 2011-06-08T03:02:39.850 に答える
3

接続を本当に安全にしたい場合は、SSLを使用してください。データが重要でない場合は、サーバーでパスワードをハッシュします。クライアントでハッシュすることはできますが、ハッシュされたパスワードとソルトがとにかく危険にさらされる可能性があるため、簡単なパスワードが破損する可能性があります。

于 2011-06-08T03:02:58.990 に答える