C#编写程序操作数据库如何防止SQL注入漏洞的发生

本文介绍了一种在C#编程中防止SQL注入攻击的有效方法:通过使用参数化查询来替代直接拼接用户输入到SQL语句中。这种方法可以有效避免恶意用户利用特殊字符构造恶意SQL查询,确保了数据库的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们在使用C# 编程的时候,经常会遇到操作数据库的地方,如果我们不注意,可能编写的代码就是下面这样

        在前台定义了一个文本框,name值为btnName;  定义了一个查询按钮,name值为btnSearch,Click事件为 btnSearch_Click,

private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            using (SqlConnection conn = new SqlConnection("Data Source=.\\实例名;Initial Catalog=school;Persist Security Info=True;User ID=sa;Password=密码"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from student where stugrade='" +btnName.Text+ "'";
                    //执行多条结果集,使用ExecuteReader();
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string name = reader.GetString(1);
                            MessageBox.Show(name);
                        }
                    }
                }

            }

        }


如果我们在 文本框中输入的不是我们的要查询的内容,而是这样一个字符串    1' or '1'='1   那么该查询将会一直返回true,那么就会把数据库中所有的数据都给爆出来

因此,我们将采用@ 符的方法

 conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //cmd.CommandText = "select * from student where stugrade='" +btnName.Text+ "'";
                    cmd.CommandText = "select * from student where stugrade=@stugrade";
                    cmd.Parameters.Add(new SqlParameter("@stugrade",btnName.Text));
                    //执行多条结果集,使用ExecuteReader();
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            string name = reader.GetString(1);
                            MessageBox.Show(name);
                        }
                    }
                }

这种方式,也可以使用在  insert  delete  update 语句中

insert into .... values(@stugrade,@age);

delete  .... where Id=@HaId;

转载于:https://my.oschina.net/qau/blog/509797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值