带参数的查询防止SQL注入攻击
2016-09-02 10:41
176 查看
把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数”
SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数:
参数的设定:
对于SQL Server数据库,“@”是参数的前缀。上句中定义了两个参数:@AccountName,@password。
在执行命令前给参数赋值:
可以看出,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注入攻击的条件。
代码示例:
1 static void Main(string[] args) 2 { 3 string userName = "Joe"; 4 string password = "123456"; 5 6 string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root"; 7 SqlConnection conn = new SqlConnection(strConn); 8 9 string strCmd = "SELECT AccountID FROM Account WHERE AccountName=@AccountName AND password=@password"; 10 SqlCommand cmd = new SqlCommand(strCmd, conn); 11 12 cmd.Parameters.AddWithValue("@AccountName", userName); 13 cmd.Parameters.AddWithValue("@password", password); 14 15 try 16 { 17 conn.Open(); 18 SqlDataReader dr = cmd.ExecuteReader(); 19 if (dr.Read()) 20 { 21 Console.WriteLine("成功"); 22 } 23 else 24 { 25 Console.WriteLine("失败"); 26 } 27 } 28 catch (Exception e) 29 { 30 Console.WriteLine(e); 31 } 32 finally 33 { 34 conn.Close(); 35 } 36 }
相关文章推荐
- ADO.NET笔记——带参数的查询防止SQL注入攻击
- sql语句不应该直接带参数是为了防止sql注入攻击
- mysql使用bind_param()参数绑定来防止SQL注入攻击
- 参数化登陆防止SQL注入攻击
- ADO.NET防止SQL注入漏洞攻击,两种参数查询
- 优化 MySQL 查询的 Limit 参数
- 把SQL语句整个做参数传进存储过程查询或者执行
- 请问视图是否可以像存储过程那样带参数进行查询
- 如何查询和设置系统参数
- 使用准则进行条件查询--1.3.运行查询前输入参数
- Dvbbs.7.1.0变量参数查询表
- .NET中oledb访问access含子查询的语句的参数置换顺序
- 登陆模块防止恶意用户SQL注入攻击
- 四个参数的查询案例
- 利用instr()函数防止SQL注入攻击
- 在jboss4环境下,URL查询参数中支持中文
- hibernate3中文查询参数处理
- 防止SQL注入的参数接收
- 【spring+hibernate学习文档】---中文参数查询
- 如何用存储过程实现下面功能:以表名为参数,查询出这个表中的所有数据