嗯,我一直试图建立一个简单的登录(没有那么复杂),一切工作正常,但不是部分,当你需要比较数据库结果和用户输入。问题在这里:
if (item.user == User && item.password == Password) {
itExists = true;
break;
}
项目。usuario工作正常,用户输入也保存正确,我知道这一点,因为当我尝试与this比较时:
if (item.user.Contains(User) && item.password.Contains(Password)) {
itExists= true;
break;
}
It works "fine",问题是"Contains"是,当用户输入一个字母(例如,假设在数据库中,用户/密码是admin/admin,用户输入a/a),它将允许他登录,因为"包含在"admin">
所以,我搜索了几乎所有的比较方法,我试了这个:
// Isn't working directly. ToString(item.user) == Convert.ToString(User) && Convert.ToString(item.password) == Convert.ToString(Password)
// Isn't working directly. item.user== User && item.password == Password
// Isn't working directly. item.user.Equals(User) && item.password.Equals(Password)
// Isn't working directly. String.Equals(item.user, User) && String.Equals(item.password, Password)
// Is working, but if u write a single letter that is in the string,
// It let u sign in. item.user.Contains(User) && item.password.Contains(Password)
我知道那些不起作用,因为使用。contains()它允许u使用正确的用户名/密码登录,但问题是我告诉
我想知道为什么会发生这种情况,以及如何做。
每个变量包含:
- 项目。user是foreach的一个迭代(它带来了数据库用户的信息)
- User是用户的输入(html表单)
完整的控制器代码在这里:
public ActionResult Index(string User, string Password) {
var UsersList= db.Users;
bool itExists= false;
foreach (var item in UserList) {
if (item.user.Contains(User) && item.password.Contains(Password)) {
itExists= true;
break;
}}
(我想我已经解释得很清楚了,抱歉我没有)
谢谢你提前:)
编辑:如果它的关系,我使用ASP。净(。. Net Framework 4.7.2)
密码应该使用"=="comparaison。用户发送的密码应该与数据库中的密码完全匹配(顺便说一下,您应该使用哈希而不是实际的密码,但这不是这里的问题)。
对于用户名,你可以更灵活(例如,用户可能会使用大写字母或在后面添加空格),所以你应该注意:
item.usuario.Trim().Equals(User, StringComparison.CurrentCultureIgnoreCase);
使用Trim(),您将删除之前/之后的所有空白,并且Equals参数将确保比较将不区分大小写。
你还应该修剪"用户";如果在添加到数据库之前没有做什么。
你也应该用LINQ来代替a:
var trimmedUserName = item.usuario.Trim();
var exists = UserList.Any(u => trimmedUserName.Equals(User,
StringComparison.CurrentCultureIgnoreCase) && item.password == Password);
我相信你知道但是使用"。contains"这将是一个巨大的安全问题。
我认为你应该重新安排你的Index方法。
public ActionResult Index(string User, string Password) {
var dbUser = _db.Users
.FirstOrDefault(u => u.UserName == User && u.password == Password);
if(dbUser != null)
itExists = true;
return Ok(itExists);
}}