首页 > 代码库 > 带参数的查询防止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 try16 {17 conn.Open();18 SqlDataReader dr = cmd.ExecuteReader();19 if (dr.Read())20 {21 Console.WriteLine("成功");22 }23 else24 {25 Console.WriteLine("失败");26 }27 }28 catch (Exception e)29 {30 Console.WriteLine(e);31 }32 finally33 {34 conn.Close();35 }36 }
带参数的查询防止SQL注入攻击
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。