• ADO。Net(二)——防止SQL注入攻击


    规避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();
    }

  • 相关阅读:
    跟我一起玩Win32开发(转自CSDN-东邪独孤)
    c指针讲解
    9×9扫雷游戏代码-C写的
    Winform GDI+ 相关资料
    hadoop datanode 和namenode之间的心跳
    打包 压缩 命令tar zip
    kudu 问题集
    配置NTP服务ntpd/ntp.conf
    kudu 1.8.0(开发版) 源码安装
    hue 集成spark+livy
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9756369.html
Copyright © 2020-2023  润新知