2012-03-20 9 views
2

私たちが間違ったパスワードを入力すると、ほとんどのウェブサイトで「ユーザー名またはパスワードが間違っています」と表示されます。 「あなたのパスワードは間違っています」と言わないのはなぜですか?「あなたのパスワードは間違っている」と言わないのはなぜですか?

+0

http://stackoverflow.com/questions/712339/why-should-checking-a-wrong-password-take-longer-than-checking-the-right-one/712363#712363 – paxdiablo

答えて

3

ちょうど「パスワードが間違っている」というのセキュリティ上の問題を無視するよりも行うことがはるかに高速です。 まず、「あなたのパスワードが間違っている」と言うことができるかどうか確認できます。

私は大学のグループにこの質問を掲載しました。グループからの1つの回答がここではポジティブな価値があると感じました。

ウェブサイトは、ウェブサイトは、あなたが正しくあなたのユーザー名を入力したことを確認してください である場合にのみ、「パスワードが間違っている」と言うことができます。ウェブサイトはあなたのユーザー名を正しく入力したことを、どのようにして に知らせていますか?それを知る方法はありません。

認証の失敗は、次の3つの方法で発生する可能性があります

  1. あなたは正しいユーザ名が、間違ったパスワードを入力することができます。
  2. 正しいパスワードを入力しても間違ったユーザー名を入力することがあります。
  3. 間違ったユーザー名とパスワードを入力することがあります。

ウェブサイトでは以下のように処理されます。

。ユーザー名がデータベースにない場合、Webサイトは「あなたのユーザー名が間違っています」と言うことはできません。ウェブサイトはあなたが入力したパスワードがあなたの正しいパスワードかどうかを知らないので、ウェブサイトは「ユーザー名かパスワードが間違っている」と言うことができます。のみ。

b。ユーザー名がデータベースにある場合、ウェブサイトは「あなたのパスワードは間違っている」と言うことはできません。 ウェブサイトは、入力したユーザー名が正しいユーザー名かどうかわからないためです。したがって、ウェブサイトで「ユーザー名またはパスワードが間違っています」と言うことができます。のみ。

7

誰かが有効なユーザー名とパスワードを推測しようとしている場合、「はい、有効なユーザー名を推測できました」というメッセージは表示されません。ユーザー名が他の方法で表示される場合は、特定のサイトで有用な場合とそうでない場合があります。

+0

ウェブサイトのほとんどサインアップパスワードまたはリセットパスワードを持っています。この機能を使用すると、有効なユーザー名を簡単に取得できます。 –

+1

@habeebperwad、あなたがそれを行うことができれば、それは正しく設計されていません。ユーザー名(またはユーザー名を忘れた場合は電子メール)を入力する必要があります。その後、そのアドレスに電子メールを送信して、回復プロセスを開始します。私は_never_何かをしたサイトを見たことがない "あなたのusernamkeボブですか?それは確かにセキュリティホールになるでしょう。私があなたの質問にコメントしたリンクをチェックしてください。パスワードから「xyzzy」を入力しただけの短いステップです。「supersekritsauce」を意味するのではないでしょうか? ':-) – paxdiablo

+0

@paxdiablo http://stackoverflow.com/users/account -recoveryと入力し、「[email protected]」と入力して入力します。 「その電子メールアドレスを持つユーザーはいません」と表示されます。 –

1

セキュリティとは別に、「怠惰な」デザインの選択肢もあります。ユーザー名が間違っているかパスワードが間違っているかどうかを個別にチェックするのはなぜか1つのクエリを書いて成功かどうかを出力するだけで、最終的にユーザーはどちらかが間違っているかどうかを知ることができます。

0

また、怠惰やコードの清潔さも保証されます。下の簡単な例。

If(password != submittedpw || username != submittedusername) 
{ 
    Print 'username and or password is wrong'; 
} 

上記

if (password != submittedpw) 
{ 
    Print 'password is wrong'; 
} 
elseif (username != submittedusername) 
{ 
    print 'username is wrong'; 
} 
関連する問題