首页 > 数据库技术 > 详细

ADO.net 防止SQL 字符串注入攻击

时间:2016-11-29 22:30:28      阅读:250      评论:0      收藏:0      [点我收藏+]

规避SQL注入

 

如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击

如:输入Code值

      p001‘ union select * from Info where ‘1‘=‘1 //这样可以查询到所有数据,不要轻易相信用户输入的内容

防止SQL注入攻击

通用方法:可以用正则匹配掉特殊符号

推荐方法:再给命令发送SQL语句的时候分两次发送

     把SQL语句拆成两块

              用户输入的是一块;本身写好的是一块

              第一次把CommandText里写的sql语句发过去;第二次把变量值发过去,进行匹配

例:

使列名等于一个变量名

改变量绑定参数 cmd.Parameters.AddWithValue("变量名称",变量值);

cmd.Parameters是对象里面的一个属性,返回值是一个集合

有时会用到同样的变量名 所以在绑定参数之前先清除一下cmd.Parameters.Clear();

技术分享
static void Main(string[] args)
        {
            //接收用户输入的查询条件
            Console.WriteLine("请输入要查询的汽车代号:");
            string code = Console.ReadLine();

            //造连接对象
            SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123");

            //造命令对象
            SqlCommand cmd = conn.CreateCommand();

            //给命令对象一条SQL语句
            //使code=一个变量
            cmd.CommandText = "select * from Car where Code=@code";
            //cmd.CommandText = "select * from Car where Code=@code or Name=@name";

            //改变量绑定参数
            cmd.Parameters.Clear();//清除绑定的变量,最好每次用参数集合前写一个清除
            cmd.Parameters.AddWithValue("@code",code);
            //cmd.Parameters.AddWithValue("@name",name);//有多少列绑多少个

            //打开连接
            conn.Open();

            //执行SQL语句
            SqlDataReader dr = cmd.ExecuteReader();

            //读取数据
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Console.WriteLine(dr[0] + "--" + dr[1]);
                }
            }
            else
            {
                Console.WriteLine("没有查到相应的数据");
            }

            //关闭连接
            conn.Close();

            Console.ReadLine();
        }
View Code

 

ADO.net 防止SQL 字符串注入攻击

原文:http://www.cnblogs.com/shadow-wolf/p/6115194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!