2012-02-26 16 views
0

最近私は自分自身のログインシステムを開発したいと思った。誰かがこれまでにこれをしていたと確信していますが、これはどのように動作するかの概要です。安全なログインシステムを作る方法

もちろん、ID、ユーザー名、暗号化された暗号化されたパスワード、電子メールなどのデータを含む「メンバー」テーブルがあります。

第2に、「セッション」と呼ばれる別のデータベースがあり、カスタムセッションハッシュとユーザーのIDが含まれています。

誰かがログインすると、すべてのチェックが終わった後、スクリプトは一意の32文字の長さのハッシュを生成し、それをユーザーのセッション情報に格納します。同じセッションハッシュが、ログインしたユーザのIDとともに「セッション」データベースに挿入されます。

セッションが有効かどうかをチェックすると、このセッションがデータベースに存在するかどうかがチェックされます。そうであれば、ユーザーの最後の操作が15分以上前であったかどうかを確認します。そうである場合、セッションは期限切れになり、データベースから削除され、ユーザーをログアウトします。

このシステムに関するご意見をお聞かせください。どうすれば改善できるのですか?

ありがとうございます!

+0

[CodeReview](http://codereview.stackexchange.com)のコードと共にこの質問を投稿する必要があります。より適切な場所です(この質問はすぐに終了します)。 –

答えて

0

あなたができることはたくさんありますが、あなたのシステムは大丈夫です。私が提案できる唯一のことは、リモートユーザのIPアドレスをセッションテーブルにも格納することです。これをしないと、あなたのアプリはセッション盗難に脆弱になります。これは、セッションハッシュが常にSSL経由で送信されることを確認した場合には問題にはなりませんが、そうでない場合は、32文字のセッションハッシュを取得して誰かのセッションを盗み出し、

したがって、セッションテーブルで有効なセッションを確認するときに、IPアドレスがまだ一致していることを確認します。唯一の欠点は、有効なユーザーにとっては、セッションの途中でIPアドレスが変更され、何かをしている間にIPアドレスがログアウトすることです。ブロードバンドがますます普及しているため、これは最近の問題ではありません。

+0

私は記事で言及するのを忘れましたが、IPとユーザエージェントが同じかどうかをチェックしています。私はIPだけを使うべきですか、あるいは私はユーザーエージェントを保持すべきですか?ありがとう。 –

+0

まあ、ちょうど私の2ペニー。ユーザーエージェントはスプーフィング可能です。ハッキングの試みは、ユーザーエージェントが望むものを置くことができます。しかし、より安全であればあるほど良い。ユーザーエージェントをチェックするのは害ではありません。私は最も重要なのは、ログインリクエストとセッションチェックが常に安全な接続(SSL)を介して行われることです。 –

0

私はあなたがSQLデータベースを使用していると仮定しています...

このシステムは、あなたがそのようなユーザ入力をエスケープするなど、すべての基本的なセキュリティチェックをやっているとして、それは限り、[OK]をする必要がありかのように思えます最後に使用されたIPアドレスを保存します。セッションの途中でIPが変更された場合は、疑わしいことが起こっている可能性がありますので、ユーザをログアウトさせるか、再認証を強制してください。

+0

はい、私はPDOを使用してデータベースで実際にそれらを実行する前にすべての文を準備しています。ユーザーがログインするたびに、新しいIPアドレスを持つ新しいセッションハッシュが生成されます。つまり、常に最新のIPアドレスを使用しています。 –

+0

あなたの質問では、ユーザーが最後の操作をいつ実行したかを確認したと言いました。どこでもこのコードを追加して、IPが同じかどうかを確認してください。 –

+0

はい、わかりました。ありがとう。 –

0

あなたが行うべき最も重要なことの1つは、少なくともログイン時にできるだけ多くSessionIDを変更することです。そして、ハッシュは本当に本当にランダムでなければなりません。

もう1つの保護メカニズムは、パスワードを3回間違って入力すると、たとえば10分間ユーザーをロックすることです。

関連する問題