2016-12-12 1 views
0

Ich habe jetzt ein seltsames Problem. Ich habe eine Login-Seite in ASP.NET MVC, die Benutzername und Passwort vom Benutzer akzeptiert. Wenn der Benutzer auf die Schaltfläche Anmelden klickt, wird das Formular mit den eingegebenen Daten an den Controller zurückgesendet.Das gleiche Passwort in Groß- und Kleinschreibung übernehmen

Dann benutze ich unten Code zu überprüfen, ob es sich um eine gültige Anmeldung ist:

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

isValidLogin ist true für beide Fälle zurück. dh wenn das Passwort pwd ist und der Benutzer enter PWD ist, wird true zurückgegeben. Würde einige wertvolle Vorschläge schätzen.

+1

haben Sie Sortierungs Ihrer Datenbank überprüft? –

+2

Ich weiß nicht, was das Problem ist, aber das Speichern von Passwörtern im Klartext ist wirklich schlecht. – nbokmans

+0

@nbokmans: Ich plane, in der nächsten Phase Passwort-Hashing zu verwenden. – ViVi

Antwort

3

Ich denke, dass die Standardsortierung von SQL Server Groß-und Kleinschreibung nicht beachtet. Sie können die Kollatierung auf Server-, Tabellen- oder Spaltenebene festlegen.

Ihren Server collaction Um zu überprüfen:

SELECT SERVERPROPERTY('COLLATION') 

In meinem Fall ist es: Latin1_General_CI_AS. Dieses CI steht für Groß-/Kleinschreibung.

Sie können verwirrt sein über string.Equals wird Groß-und Kleinschreibung, aber es ist tatsächlich zu einer Abfrage in LINQ to Entities konvertiert.

Sie können die Sortierung der Kennwortspalte in die Groß- und Kleinschreibung ändern, wenn Sie möchten.

PS

Es ist wirklich nicht zum Speichern von Passwörtern im Klartext empfohlen. Wenn Sie eine Datenbank haben oder das Backup kompromittiert wird, sind Sie verloren. Die Empfehlung speichert sie als gesalzene Hashes. Jedes Mal, wenn sich der Benutzer anmeldet, wenden Sie das Hash + Salz auf das Kennwort an und vergleichen es mit dem, was in der Datenbank gespeichert ist. Hashes sind nicht reversibel.

Auch, wenn Sie Hashes verwenden, wird es Groß- und Kleinschreibung als Bonus sein :)

+0

Ich denke, Sie könnten die Prüfung im Code mit 'String.Equals (user.userName, login.username)' auch (?) – Mackan

+0

@Mackan erzwingen, die eine Ausnahme auslösen würde, weil LINQ nicht wissen würde, wie man es konvertiert zu SQL. Um es in Code zu überprüfen, tun Sie es nach der Materialisierung (.ToList()) –

+0

Danke. Ich werde überprüfen. – ViVi

Verwandte Themen