ADO.NET笔记——带参数的查询防止SQL注入攻击
2015-03-20 15:53
183 查看
相关知识:
把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数”
SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数:
参数的设定:
对于SQL Server数据库,“@”是参数的前缀。上句中定义了两个参数:@AccountName,@password。
在执行命令前给参数赋值:
可以看出,SQL中的参数就跟平常函数中的参数一样,先声明,后赋值。在执行SQL命名时,将会把参数值当成一个字符串整体来进行处理,即使参数值中包含单引号,也会把单引号当成单引号字符,而不是字符串的起止符。这样就在某种程度上消除了SQL注入攻击的条件。
代码示例:
把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数”
SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数:
参数的设定:
string strCmd = "SELECT AccountID FROM Account WHERE AccountName=@AccountName AND password=@password";
对于SQL Server数据库,“@”是参数的前缀。上句中定义了两个参数:@AccountName,@password。
在执行命令前给参数赋值:
SqlCommand cmd = new SqlCommand(strCmd, conn); cmd.Parameters.AddWithValue("@AccountName", userName); cmd.Parameters.AddWithValue("@password", password); cmd.ExecuteReader();
可以看出,SQL中的参数就跟平常函数中的参数一样,先声明,后赋值。在执行SQL命名时,将会把参数值当成一个字符串整体来进行处理,即使参数值中包含单引号,也会把单引号当成单引号字符,而不是字符串的起止符。这样就在某种程度上消除了SQL注入攻击的条件。
代码示例:
static void Main(string[] args) { string userName = "Joe"; string password = "123456"; string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root"; SqlConnection conn = new SqlConnection(strConn); string strCmd = "SELECT AccountID FROM Account WHERE AccountName=@AccountName AND password=@password"; SqlCommand cmd = new SqlCommand(strCmd, conn); cmd.Parameters.AddWithValue("@AccountName", userName); cmd.Parameters.AddWithValue("@password", password); try { conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { Console.WriteLine("成功"); } else { Console.WriteLine("失败"); } } catch (Exception e) { Console.WriteLine(e); } finally { conn.Close(); } }
相关文章推荐
- ADO.NET防止SQL注入漏洞攻击,两种参数查询
- 复习ADO.NET的参数查询 Parameter
- ADO.NET笔记——SQL注入攻击
- 黑马程序员之ADO.NET学习笔记:IP地址归属地查询。查询结果:北京移动[海淀]。
- C#学习笔记(六)-使用ADO .NET查询和操作数据库
- C# ADO.NET参数查询
- ADO.NET Entity Framework学习笔记 ESQL查询语句
- 带参数的查询防止SQL注入攻击
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- C# ADO.NET中设置Like模糊查询的参数
- C# ADO.NET参数查询
- 黑马程序员之ADO.NET学习笔记:SqlParameter(Sql参数)
- 黑马程序员—ADO.Net笔记(防止sql注入)
- 使用ADO.NET的参数集合来有效防止SQL注入漏洞 推荐
- ADO.NET 查询一条记录时,如何并查出上一条记录的ID,和下一条记录的ID
- [ASP.NET学习笔记之三]ADO.NET开发最佳实践
- 执行数据库命令Command对象——ADO.NET学习&应用笔记之三
- 运用 ADO.NET 对象优化数据查询代码
- [ASP.NET学习笔记之六]开发高性能的ADO.NET应用
- [随笔]有关存储过程和ADO.Net的笔记