2012-04-01 6 views
0

これはまったく気にするものではありませんが、私はこれについて「公式な」評決を聞いたことがないように感じます。それは問題ではないかもしれないし、あまりにも明白で、MySQLとユーザー認証 - 内部クエリとクエリ後の強い証拠?

  1. MySQLのクエリでのチェックユーザ/パスワード(すべてが消毒および/または調製され、パスワードは塩漬けとハッシュ化保存されてきたと仮定した場合):

    だから私はそれを見るように3つのオプションがありますコード内で

    SELECT COUNT(username) FROM users WHERE user = '$user' && pass = '$pass'; 
    
  2. ユーザー/パスワードの照会とチェック:

    SELECT user, pass FROM users WHERE user = '$user'; 
    
  3. 他の何か私は全く気づいていないし、やっているはずです。

1または2と一緒に行く明確な理由はありますか?3がある場合、私はすべて耳です。

+0

これは私自身の質問です。http://programmers.stackexchange.com/questions/46451/are-two-database-trips-reasonable-for-a-login-system –

+0

@RandolphWest - あなたのシナリオでは、ログインごとに新しい塩を使用していますか?だから私は私たちの質問は根本的に同じだと思います。たとえば、「データベースのクエリでこれをどれくらい安全に実行できますか?しかし、今私はあなたの方法を見て、私は少し不満を感じています。私の認証のいくつかの詳細を実行し、あなたからいくつかのフィードバックを得ることができますか?終わりに、私のシステム上のデータは、ユーザー(虹のテーブルの背景を持たない)から保護されており、グループ外の価値はほとんどないが、私は私が将来のアプリケーションのためのいくつかの基本を欠いています。 – Anthony

+0

確かです。プロフィールページに連絡先の詳細があります。 –

答えて

1

あなたの#2のバージョンが一番良いと思います。ほとんどの場合、ユーザーに関する他の情報(ユニークなIDやフルネームなど)を知りたい場合や、アプリケーション)、認証が成功したら別のクエリを実行する必要があります。

私は、MySQLまたはアプリケーションコードの認証をチェックするかどうかについては不思議です。ハッシュ/復号化をどこで行うかによって異なりますが、安全で機能する必要があります。

照会で認証ステップの一部として情報を読み込むと、後で必要な情報がすべて得られます。クエリが失敗したり、期待したパスワードハッシュが与えられない場合は、それに対処することができ、害はありません。

+0

私が使用しているシステムは、初めて検証された後にランダムに生成されるサーバー側のセッショントークンです。私は、ランダムなトークンとそのIPとそのUA文字列をとり、ハッシュを作成します。セッションIDは各ページの読み込み時に再生成されます。したがって、セッションハッシュが一致しない場合は、GOに戻り、ユーザー名とパスワードを収集します。パスワードは(DBまたはコードのいずれかで)SHA1パスワードと比較され、一致する場合は再びダンスを開始します。ノンスの要素、つまりチェックされたページからページへの乱数が欠けていると思いますか?か何か? – Anthony

関連する問題