【发布时间】:2016-04-15 14:47:52
【问题描述】:
错误显示无效的列名 mustufain。
mustufain 是UserName.Text.toString() 的值
string query = "select userid from register where username = " + UserName.Text.ToString() + " and " + "password = " + Password.Text.ToString();
SqlCommand cmd1 = new SqlCommand(query,connection);
connection.Open();
SqlDataReader rd1 = cmd1.ExecuteReader();
while(rd1.Read())
{
Session["checkuserid"] = rd1["userid"];
}
connection.Close();
【问题讨论】:
-
首先,ASP.NET 不执行查询。那就是 ADO.NET。其次,你应该不通过连接构造sql语句。使用参数化查询。在这种情况下,您不知道用户输入了什么。如果是
1;drop table users;--呢? -
谷歌搜索“Bobby Tables”看看会发生什么
-
SqlConnection、SqlCommand 和 SqlDataReader 实现IDisposable。您需要在它们的
finally块中调用 dispose,或者将它们包装在 using statement 中以确保它们得到正确处理。如果你现在不这样做,你以后会遇到问题,并且很难追踪问题。 -
您似乎将明文密码存储在数据库中。不要那样做!这是一个安全问题。密码应该是单向散列和加盐的,以使攻击难以检索明文密码。为了测试用户是否输入了正确的密码,您比较了散列副本。