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