我正在ASP.NET中创建一个简单的项目,并使用此代码继续登录,检测角色并打开确切的页面。
string cmdText = "SELECT Username,Role FROM Login WHERE Username = '" + TextBox1.Text + "' AND Password = '" + TextBox2.Text + "'";
string username = "";
string role = "";
using (SqlCommand SelectCommand = new SqlCommand(cmdText, connectionstring))
{
SqlDataReader myReader;
connectionstring.Open();
myReader = SelectCommand.ExecuteReader();
while (myReader.Read())
{
username = myReader["Username"].ToString();
role = myReader["Role"].ToString();
}
myReader.Close();
Response.Redirect(role + ".aspx");
}
我设置它role+".aspx"
是因为在if函数中出现一些奇怪的错误。它无法正常工作。
但是重定向到页面仍然有问题..我注意到了这一点
因此,对此错误感到困惑,我决定检查SQL Server中的数据,并且有以下内容:
角色后面有5个空格。.我试图删除它们。但是在保存数据之后,空格再次出现。.我注意到名称和密码也一样
但是现在有9个空格..看起来SQL Server Management Studio试图填充最多10个字母...
Username
,password
并且role
是nchar(10)
类型..是什么问题?
我应该改变来解决这个问题吗?或者可以通过其他方式完成
一nchar
列中的固定长度的空间中存储其值。如果您声明一列类型,nchar(10)
则所有值都用空格填充,以达到10个字符的长度。
如果可以更改架构,则将该列更改为nvarchar(10)
类型,(对此不确定)可能需要重新编辑已经存在的所有值。
请参见SQL Server中的char,nchar,varchar和nvarchar有什么区别?
如果您无法更改架构,则可以在代码中修剪结果
Response.Redirect(role.Trim() + ".aspx");
但是,查看您的代码,我看到了一个很大的问题。您正在使用模糊字符串串联来构建查询。这是一个众所周知的代码弱点,并导致Sql Injection攻击和解析错误。
您应该使用参数尽快修复该查询
string cmdText = "SELECT Role FROM Login WHERE Username = @name AND Password = @pass";
// You already know the username
string username = textBox1.Text;
string role = "";
using (SqlCommand SelectCommand = new SqlCommand(cmdText, connectionstring))
{
connectionstring.Open();
SelectCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value = textBox1.Text;
SelectCommand.Parameters.Add("@pass", SqlDbType.NVarChar).Value = textBox2.Text;
using(SqlDataReader myReader = SelectCommand.ExecuteReader())
{
while (myReader.Read())
{
role = myReader["Role"].ToString();
}
}
Response.Redirect(role.Trim() + ".aspx");
}
最后,请考虑将明文密码存储在数据库中是另一个要避免的安全漏洞。众所周知,良好的做法是在将密码存储在数据库中之前对密码进行哈希处理和加盐处理
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句