C#编写程序操作数据库如何防止SQL注入漏洞的发生
2015-09-22 22:17
489 查看
我们在使用C# 编程的时候,经常会遇到操作数据库的地方,如果我们不注意,可能编写的代码就是下面这样
在前台定义了一个文本框,name值为btnName; 定义了一个查询按钮,name值为btnSearch,Click事件为 btnSearch_Click,
如果我们在 文本框中输入的不是我们的要查询的内容,而是这样一个字符串 1' or '1'='1 那么该查询将会一直返回true,那么就会把数据库中所有的数据都给爆出来
因此,我们将采用@ 符的方法
这种方式,也可以使用在 insert delete update 语句中
insert into .... values(@stugrade,@age);
delete .... where Id=@HaId;
在前台定义了一个文本框,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;
相关文章推荐
- JDBC 连接数据库
- sqlmap使用参数详解
- JDBC数据库连接与事物
- mysql 中浮点型与定点型记录
- spark sql cache
- spark sql cache
- spark sql cache
- spark sql cache
- mysql修改root密码的方法
- iOS:CoreData数据库的使用三(数据库和tableView表格一起使用)
- mongodb高可用集群02---副本集
- Hbase属性说明及与关系型数据库区别
- mysql 源代码编绎
- Mysql查看表的结构相关命令
- SQlite常用语句
- Oracle 11g安装过程出现“未找到文件”
- mongodb高可用集群01---单实例、主从模式、一主多从模式
- mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)
- 高通发力中低端处理器市场 联发科需要慌吗?
- redis