2016-11-22 11 views
-1

今日、私は学校で塩を使った安全なハッシュについて学び、password_hashを使い始めました。これは私がmd5のものを使用する前に驚くべきことですが、非常に安全です。しかし、今私は何かを欠いている。password_hashとログイン用のパスワードを記憶する

私のデータベースには、ログインセッションと、ユーザー名とパスワードを「覚えている」ユーザーを保存しました。その後、IPに基づいて、最後のレコードがデータベース内の「記憶」列に「はい」または「いいえ」を持っているかどうかに基づいて、パスワードのmd5を復号化し、パスワード入力の「値」として使用します。しかし、解読(私が知る限り)はpassword_hashには不可能です。あなたはそれを確認することしかできません。それでは、password_hashで「パスワードを覚えている」オプションを実装するにはどうしたらいいですか? http://php.net/manual/en/function.password-verify.php

しかし、単にユーザー、復号化パスワードで何かをする必要はありませんを覚えてセッション変数か何かを設定します。

+2

「md5」の解読は「技術的に」不可能でもありません。あなたのコードを使用すると、私たちはあなたを助けません。 – cmorrissey

+0

あなたは 'cookie'に' key'を格納し、その 'key'とユーザ' id'をデータベースに保存します。次に、ページが読み込まれたら、一致するコードがあるかどうかを確認できます。この方法で、あなたのサイトで同じブラウザ/デバイスであるかどうかを確認できます。 – Nytrix

答えて

0

一般的には、あなたが探している機能がpassword_verify()です。

0

remember me機能はCookieを使用するため、ハッシュはクライアントサイトとサーバーサイトのユーザーデータベースの基本的にユーザーパスワードハッシュの次に格納されます。

0

ハッシュされたパスワードを解読することはできません(少なくとも理論上は)。それが安全な理由のすべてです。サーバー側では、パスワードを必要とせずにユーザーにログインする方法が必要です。 「私を覚えている」部分がうまくチェックするならば、パスワードをチェックする部分をバイパスしてください。

サイドのIPアドレスではなく、本当にユーザーのセッションを覚えている素晴らしい方法ではありません。 NATの背後にあるいくつかのコンピュータは、サーバーと同じIPを持つように見えます。代わりにクッキーを使用してみてください。

2

誤解を避けるため、remember-me機能はユーザーのパスワードとは関係がありません。パスワードをクライアント側に保存するとセキュリティ侵害が深刻になります。

通常、ログイン成功後、アプリケーション:

  1. は、ユーザー名やパスワードのindependendあるランダムトークンを生成します。
  2. このトークンは、クライアント側のクッキーに設定できます。
  3. トークンのハッシュは、データベースにuseridとともに格納されます。
  4. パスワードを尋ねる代わりに、ユーザーが次回にサイトにアクセスした場合、クッキーからトークンを読み取って再度ハッシュし、既に保存されているトークンと比較することができます。
  5. ハッシュが一致すると、ユーザーはユーザー名とパスワードを入力せずにサイトにアクセスできます。
+0

'通常、ログインに成功すると、アプリケーションはランダムなトークン'を生成します。ログインするたびに新しいトークンが生成されます。 – RIKI

+0

@OTARIKI - ユーザーがログインしてRemember-Me Cookieをリクエストしたときに新しいトークンを作成します(これはもちろんオプションです)。ユーザーがログアウトした後、トークンはもう有効ではないので、次回に別のトークンを生成します。いくつかのデバイスにはいくつかのトークンが存在することもあります。 – martinstoeckli

関連する問題