2011-01-04 11 views
7

これは、基本的には、ハッシュ/ソルトが行われる限り、私は登録/ログインプロセス全体をやっているという安心です。ハッシュ&ソルト - クッキーによるログインの確認

私は、パスワード、塩、トークンのフィールドを持つusersテーブルを持っています(明らかに他にもありますが、これが最も重要です)。登録時には、ランダムな塩、およびランダムなトークンを生成し、それは、パスワードフィールドこれに置く:ランダム生成塩とトークンは、ユーザーがテーブルの行ことで、それぞれのフィールドに格納されていること

hash("sha256", $theirpostpassword.$randomgeneratedsalt); 

ログイン時には、指定したユーザー名でユーザーの行からのみ塩を選択します。次に、ポストパスワードが特定の塩と連結されている行の数のクエリを実行してからログインします。私はその部分を削除していますか?

私は、すべてのページでログインを検証することを考えていました。id-username-tokenの形式がデータベースの行と一致するかどうかを確認するために、Cookieをチェックするすべてのページが機能しました。つまり、ログインするたびに、その資格情報でCookieが設定されることを意味します。

ここで、有効なログインごとにトークンを変更するだけでよいと思いますか?

洞察力のある人に感謝します。

+1

トークンをリモートユーザのIPに依存させることになりますが、リクエストごとにその情報を使ってそのクッキーをチェックするだけでうまくいくようです。 – ncuesta

+1

すばやい応答をいただき、ありがとうございました。私はかなり頻繁に変更される動的IPアドレスがいくつかあることを知っているので、IPチェックに反対しています。 –

+0

多くのことが間違っている可能性があるので、認証システムを自分で作成するべきではありません。代わりにfacebook connect/twitterサインイン/ openidなどを使用してください! – Alfred

答えて

4

はい、すべてのログインでトークンを間違いなく変更する必要があります。さもなければ盗まれたトークンは永久に盗まれたアカウントです。ユーザーは、ログオフすることで、Cookieやその他のデータを無効にしてセッションを攻撃から保護することを期待しています。

トークンがランダムではなく、ユーザーIDのハッシュ、セッションの有効期限、Cookieで必要なもの、さらには塩のようなものを生成することで、署名として機能させることができますログインシステム)。この塩はデータベースから来る必要はありませんが、それは可能です。それはハードコーディングされた文字列(時には「コショウ」と呼ばれる)とすることができます。有効期限を過ぎていれば、クッキーを無効と見なしてください。そのため、トークンはそのデータを詐称していないことを確認するための署名でなければなりません。

+1

私はトークンが署名であることに同意しません。あなたは、トークンが紛らわしくないことを保証する唯一の方法である必要があります。是非、署名もありますが、ランダムなトークンは非常に重要です。 –

1

のフォーマットは、ID-ユーザー名トークンは、データベース内の行と一致した場合

にあなたを見てチェックし、そのクッキーは可能性がありますが、これはかなり高価であり、あなたがセッション管理の問題に対処していません - 過去にCookieの有効期限を設定しても、Cookieが削除されるとは限りません。覚えておいたタイプの関数(ただし、毎回クッキーを提示するのを避けるためにオフセットパスを使用する)のためにこれを考慮してください。

認証されたユーザー名をセッションに格納すること以外に何も得られません。しかし、ユーザーを認証し、認証トークンを渡すためにSSLを使用するときは、セッションIDを変更してください。

2

は、私にはかなりいいですね、しかし、あなたは物事のカップルの知っておく必要があります。あなたはハッシュを繰り返すことができ

がブルートフォース攻撃に対してパスワードデータベースが抵抗性にする:

$hash = $password; 
for ($i = 0; $i < 1000; ++$i) { 
    $hash = hash("sha256", $hash . $salt); 
} 

セカンド常にSSLを使用するようにしてください。それがなければ、攻撃者がログインクッキーを盗むのはかなり簡単です。それがどれほど些細なのかの良い例はfiresheepを参照してください。

ログインごとにトークンを確実に変更し、すべての要求に対してトークンを変更して、セッションの固定と再生攻撃を防止してください。

データベースから塩とハッシュを選択し、ハッシュ比較サーバー側(DBではなく)を実行して、データベースへのラウンドトリップ回数を減らすこともできます。

トークンが完全にランダムであることをお勧めします。あなたはそれが疑わしいと思うし、それを行う最善の方法はランダムです。 でも特定のIPアドレスにトークンを結び付けることができますが、これはランダムなトークンに加えて、置換えではありません。

これはすべての湧き水です。パスワードをMD5-ingしてデータベースに貼り付けるのではなく、アドバイスを求めることができます。

関連する問題