当前位置:Gxlcms > 数据库问题 > C#-黑客-数据库访问-字符串的攻击和防御

C#-黑客-数据库访问-字符串的攻击和防御

时间:2021-07-01 10:21:17 帮助过:44人阅读

System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace 攻击_防御 { class Program { static void Main(string[] args) { //创建 数据库连接类 SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=asdf;"); //创建 数据库操作类 SqlCommand cmd = conn.CreateCommand(); //一、显示Users表中的所有信息 cmd.CommandText = "select *from Users"; //在数据库中执行操作 conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) Console.WriteLine(dr["ids"] + "\t" + dr["Username"] + "\t" + dr["password"] + "\t" + dr["nickname"] + "\t" + dr["sex"] + "\t" + dr["birthday"] + "\t" + dr["nation"] + "\t" + dr["class"] + "\t"); conn.Close(); //二、让用户选择要修改的数据 Console.WriteLine(); Console.Write("请输入要修改数据的用户名:"); string uname = Console.ReadLine(); //在数据库查询有无此信息 cmd.CommandText = "select *from Users where username=‘" + uname + ""; bool has = false; conn.Open(); SqlDataReader dr1 = cmd.ExecuteReader(); if (dr1.HasRows) has = true; conn.Close(); //提示有无此信息,是否进行修改 if (has) { Console.WriteLine("已查到此用户信息,请输入修改后的信息"); Console.Write("请输入修改的用户名:"); string xname = Console.ReadLine(); Console.Write("请输入修改的密码:"); string xpwd = Console.ReadLine(); Console.Write("请输入修改的昵称:"); string xnick = Console.ReadLine(); Console.Write("请输入修改的性别:"); bool xsex = Convert.ToBoolean(Console.ReadLine()); Console.Write("请输入修改的生日:"); DateTime xbir = Convert.ToDateTime(Console.ReadLine()); Console.Write("请输入修改的民族:"); string xnation = Console.ReadLine(); Console.Write("请输入修改的班级:"); string xcla = Console.ReadLine(); //修改信息准备操作 cmd.CommandText = "update Users set username=‘" + xname + "‘,password=‘" + xpwd + "‘,nickname=‘" + xnick + "‘,sex=‘" + xsex + "‘,birthday=‘" + xbir + "‘,nation=‘" + xnation + "‘,class=‘" + xcla + "‘ where username=‘" + uname + ""; //在数据库中执行操作 conn.Open(); int i0 = cmd.ExecuteNonQuery(); conn.Close(); //判断是否修改成功 if (i0 > 0) Console.WriteLine("数据修改成功!"); else Console.WriteLine("数据修改失败!"); } else Console.WriteLine("查无此信息。"); Console.ReadLine(); } } } 对数据库数据进行修改操作

技术分享

修改后数据库数据:

技术分享

=====================================================================================================

如何对数据库进行字符串攻击?

技术分享

此时数据库中数据全部被删除,为什么?

技术分享

在数据库中输入与修改时相同的代码试试

技术分享

数据库读取到了“delete from Users”字符串,并且它之后的所有代码被“--”注释掉了,并不会执行,所有数据库执行了delete语句,删除了数据库所有信息

=====================================================================================================

针对以上情况,如何防御数据库被修改?——占位符

update Users set 后的语句用占位符代替,比如:set username=‘"+zhangsan+"‘,password=‘"+asdf+"‘ 用set username=@username,password=@password

代替时,等号后面的单引号也去掉

执行cmd.Parameters.Clera();语句清空集合,然后进行添加,指定占位符的意义

技术分享

 再次进行攻击

技术分享

数据库的结果为

技术分享

数据库数据并没有删掉,而删除语句作为字符串被占位符带入数据库中,成功防御了字符串的攻击

C#-黑客-数据库访问-字符串的攻击和防御

标签:indicator   comm   while   增删改查   ogr   update   cti   攻击   hid   

人气教程排行