zoukankan      html  css  js  c++  java
  • C#-黑客-数据库访问-字符串的攻击和防御

    C#中用基本的方法对数据库进行增删改查,会被黑客利用,写入其他的代码以实现对数据库的数据进行其他的操作。例如:

    对下列数据库的某个信息进行修改操作

    修改代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;
    
    namespace 攻击_防御
    {
        class Program
        {
            static void Main(string[] args)
            {
                //创建 数据库连接类
                SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=asdf;");
                //创建 数据库操作类
                SqlCommand cmd = conn.CreateCommand();
    
                //一、显示Users表中的所有信息
                cmd.CommandText = "select *from Users";
    
                //在数据库中执行操作
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                    Console.WriteLine(dr["ids"] + "	" + dr["Username"] + "	" + dr["password"] + "	" + dr["nickname"] + "	" + dr["sex"] + "	" + dr["birthday"] + "	" + dr["nation"] + "	" + dr["class"] + "	");
                conn.Close();
                //二、让用户选择要修改的数据
                Console.WriteLine();
                Console.Write("请输入要修改数据的用户名:");
                string uname = Console.ReadLine();
    
                //在数据库查询有无此信息
                cmd.CommandText = "select *from Users where username='" + uname + "'";
                bool has = false;
                conn.Open();
                SqlDataReader dr1 = cmd.ExecuteReader();
                if (dr1.HasRows)
                    has = true;
                conn.Close();
    
                //提示有无此信息,是否进行修改
                if (has)
                {
                    Console.WriteLine("已查到此用户信息,请输入修改后的信息");
                    Console.Write("请输入修改的用户名:");
                    string xname = Console.ReadLine();
                    Console.Write("请输入修改的密码:");
                    string xpwd = Console.ReadLine();
                    Console.Write("请输入修改的昵称:");
                    string xnick = Console.ReadLine();
                    Console.Write("请输入修改的性别:");
                    bool xsex = Convert.ToBoolean(Console.ReadLine());
                    Console.Write("请输入修改的生日:");
                    DateTime xbir = Convert.ToDateTime(Console.ReadLine());
                    Console.Write("请输入修改的民族:");
                    string xnation = Console.ReadLine();
                    Console.Write("请输入修改的班级:");
                    string xcla = Console.ReadLine();
    
                    //修改信息准备操作
                    cmd.CommandText = "update Users set username='" + xname + "',password='" + xpwd + "',nickname='" + xnick + "',sex='" + xsex + "',birthday='" + xbir + "',nation='" + xnation + "',class='" + xcla + "' where username='" + uname + "'";
                    //在数据库中执行操作
                    conn.Open();
                    int i0 = cmd.ExecuteNonQuery();
    
                    conn.Close();
                    //判断是否修改成功
                    if (i0 > 0)
                        Console.WriteLine("数据修改成功!");
                    else
                        Console.WriteLine("数据修改失败!");
    
    
                }
                else
                    Console.WriteLine("查无此信息。");
    
                Console.ReadLine();
            }
        }
    }
    对数据库数据进行修改操作

    修改后数据库数据:

    =====================================================================================================

    如何对数据库进行字符串攻击?

    此时数据库中数据全部被删除,为什么?

    在数据库中输入与修改时相同的代码试试

    数据库读取到了“delete from Users”字符串,并且它之后的所有代码被“--”注释掉了,并不会执行,所有数据库执行了delete语句,删除了数据库所有信息

    =====================================================================================================

    针对以上情况,如何防御数据库被修改?——占位符

    update Users set 后的语句用占位符代替,比如:set username='"+zhangsan+"',password='"+asdf+"' 用set username=@username,password=@password

    代替时,等号后面的单引号也去掉

    执行cmd.Parameters.Clera();语句清空集合,然后进行添加,指定占位符的意义

     再次进行攻击

    数据库的结果为

    数据库数据并没有删掉,而删除语句作为字符串被占位符带入数据库中,成功防御了字符串的攻击

  • 相关阅读:
    logstash 字段引用
    Filter Conditions 过滤条件
    Not found org.springframework.http.converter.json.MappingJacksonHttpMessageConve
    rsyslog Properties
    rsyslog 模板
    rsyslog 基本结构
    awk RS ORS
    elasticsearch分布式特点
    spring事物配置,声明式事务管理和基于@Transactional注解的使用
    myBatis:事务管理
  • 原文地址:https://www.cnblogs.com/qq450867541/p/6116056.html
Copyright © 2011-2022 走看看