2016-12-12 14 views
0

私は今、奇妙な問題に直面しています。私はユーザーからのユーザー名とパスワードを受け入れるASP.NET MVCのログインページを持っています。 ユーザーがログインボタンをクリックすると、フォームは入力されたデータでコントローラに戻されます。大文字と小文字の両方で同じパスワードを受け入れる

その後、私はそれが有効なログインであるかどうかを確認するために、コードの下に使用します。

var isValidLogin = (from user in dbEntities.usermasters 
        where (user.userName.Equals(login.username) && user.password.Equals(login.password)) 
        select user).Any(); 

isValidLoginは両方のケースのためにtrueを返しています。すなわち、パスワードがpwdであり、ユーザがPWDを入力した場合、パスワードはtrueです。 いくつかの貴重な提案をいただければ幸いです。

+1

データベースの照合をチェックしましたか? –

+2

問題は何か分かりませんが、平文のパスワードを保存するのは本当に悪いです。 – nbokmans

+0

@nbokmans:次の段階でパスワードのハッシュを使用する予定です。 – ViVi

答えて

3

SQL Serverの既定の照合では大文字と小文字が区別されません。サーバー、テーブル、または列のレベルで照合順序を設定できます。サーバーcollaction確認するには

:私の場合は

SELECT SERVERPROPERTY('COLLATION') 

は、それはです:Latin1_General_CI_AS。このCIは、大文字と小文字を区別しません。

string.Equalsは大文字と小文字を区別しないと混同されることがありますが、実際にはLINQ to Entitiesのクエリに変換されます。

必要に応じて、パスワード列の照合を大文字と小文字の区別に変更することができます。

PS

本当に平文でパスワードを保存しないことをお勧めします。あなたがデータベースである場合、またはバックアップが損なわれた場合、あなたは破滅します。 recomendationは、それらを塩漬けのハッシュとして格納しています。ユーザーがログインするたびに、パスワードにハッシュ+ソルトを適用し、データベースに格納されているものと比較します。ハッシュはリバーシブルではありません。

また、ハッシュを使用すると、大文字と小文字が区別されます:)

+0

私は 'String.Equals(user.userName、login.username)'を使ってチェックを強制的に行うことができると思います。 – Mackan

+0

@Mackan、それはLINQが変換方法を知らないので例外を引き起こすでしょうSQLへ。コードで確認するには、マテリアライゼーション(.ToList())の後にしてください –

+0

ありがとうございます。私がチェックします。 – ViVi

関連する問題