//用户登录注入漏洞测试
//连接数据库
Console.WriteLine("请输入用户名");
string username = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
using (SqlConnection coon = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\C#程序\第二阶段\第二阶段\ADO.NET入门\AOD.net.mdf;Integrated Security=True"))
{
coon.Open();
using (SqlCommand cmd = coon.CreateCommand())
{
cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";//这个是执行的语句
int i = Convert.ToInt32(cmd.ExecuteScalar());这儿是返回的第一列的第一行,这儿和上面的COUNT(*)有什么关联,当上面的代码如果用户名密码都相等就那i就是1,f否则为0,加上1’ or '1'='1 ,那就是username='" + username + "' and passwors='1' or '1'='1'";这样密码就成立了,那我想问一下,是不是如果密码我输错了那便是 cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句话是没有执行还是执行了,话说我没明白"select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句话是干啥的,这个查询语句不是返回的*也就是整个表的数量吗 求解
刚才测试下 select count(*) as 数量 from fuser where username='admin' and passwors='888'; 检索出来的数量是3,这3是3个列,和下面的I>0有神马关系啊
if (i > 0)
{
Console.WriteLine("登录成功");
}
else
{
Console.WriteLine("用户名或密码错误");
}
}
}
Console.WriteLine("测试成功");
Console.ReadKey();
作者: zhiaijingming 时间: 2013-2-21 12:41
cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句是查询你输入的用户名和密码与数据库中用户名和密码符合的记录有几条,如果大于1条,那么则显示登录成功,就是说数据库中存在这条记录。否则则失败,明白么?不明白再问我·····作者: 黑马-杨鹏立 时间: 2013-2-21 13:09
int i = Convert.ToInt32(cmd.ExecuteScalar());这儿是返回的第一列的第一行,这儿和上面的COUNT(*)关联是i的值是执行sql命令后返回满足cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";的结果总数;
是不是如果密码我输错了那便是 cmd.CommandText = "select count(*) from fuser where username='" + username + "' and passwors='" + password + "'";这句话是没有执行还是执行了一定是执行了的,不然程序无法判断密码是否正确