4

セキュリティ上の理由から、ユーザーのパスワードを (salt を使用して) ハッシュし、それを保存されているハッシュされたパスワードと比較する必要があることを私は知っています。それをレインボーテーブルに。

やり方が分からないところがあります。この標準のログインフォームがあるとしましょう

<form method='post' action='login.php'>
    <input type='text' name='user' />
    <input type='password' name='password' />
    <input type='submit' name='submit' value='login' />
</form>

次に、ログインにPHPを使用します

<?php
    if(isset($_POST['submit'])){
        $username = $_POST['username'];
        $password = sha1($_POST['password']);
        $authorize = $login_object->login($username, $password);
    }
?>

そして、舞台裏で、$login_objectがデータベースでの認証を処理し、true/false を返します。(私はこのオブジェクトを作成しました。これを行うための実際の便利なオブジェクトがあります)

しかし、それは旅行中の生のパスワード、POST requestハッシュ化されていない安全でないことを意味します! 誰でも本当のパスワードを傍受できたはずです!

だから私が考えているのは、パスワードを送信する前に、JavaScriptを使用してパスワードをハッシュする必要があるということです。隠しフィールドが<input type='hidden' name='real_password' value='' />あり、javaScript に password という名前の入力の値をコピーさせ、それをハッシュし、それを real_password 隠し入力に入れ、パスワード フィールドを空白にします。この方法ではPOST request、生の安全でない元のパスワードではなく、ハッシュ化されたパスワードが保持されます。

私が言っていることは正しいですか、それともphpでハッシュを行うべきですか?

4

3 に答える 3

6

ハッシュは、サーバー側のデータを保護します。サーバーへのデータフローを保護するには、HTTPS を使用します。その点で、パスワードまたはそのハッシュがネットワーク上で盗まれた (そして後で複製された) かどうかに違いはありません。HTTPS は、南京錠がユーザーのブラウザに表示されることを保証するための証明書も付与します (適切な認証がないページでは、重要なパスワードを決して入力しないでください)。

于 2012-11-08T02:08:22.543 に答える
3

多くのコメンテーターが言っているように、SSL 証明書をインストールすると盗聴を防ぐことができるので、心配する必要はありません。HTTP 経由での送信は暗号化されておらず、特に安全でないワイヤレス ネットワークでは盗聴の影響を受けやすくなっています。

クライアント側でパスワードをハッシュすることに関しては、ブラウザ自体によって実際に生成されるクライアント SSL 証明書を調べることをお勧めします (接続を暗号化するために SSL 証明書がインストールされていると仮定します)。タグを HTML に挿入するだけ<keygen>で、ブラウザがキー ペアを生成し、秘密キーをキー ストアに保存します ()。次に、サイトにアクセスすると、ユーザーは公開鍵をサーバーに送信して認証します。残念ながら、現在のすべてのブラウザーでは少し面倒であり、Internet Explorer ではまったく動作しません (驚き、驚きです。Microsoft に感謝します!)。

于 2012-11-08T02:16:34.390 に答える
3

答えとしての私のコメント;)

Javascript でパスワードをハッシュ化すると、ログインに必要な実際のパスワードはハッシュ化されたパスワードになり、暗号化されずに未加工のままネットワーク上を移動します。ユーザーのブラウザからサーバーにパスワードを安全に送信するには、SSL を使用する必要があります。

于 2012-11-08T02:12:29.627 に答える