C#-黑客-数据库访问-字符串的攻击和防御

Posted 野性狼心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"] + "\\t" + dr["Username"] + "\\t" + dr["password"] + "\\t" + dr["nickname"] + "\\t" + dr["sex"] + "\\t" + dr["birthday"] + "\\t" + dr["nation"] + "\\t" + dr["class"] + "\\t");
            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();语句清空集合,然后进行添加,指定占位符的意义

 再次进行攻击

数据库的结果为

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

以上是关于C#-黑客-数据库访问-字符串的攻击和防御的主要内容,如果未能解决你的问题,请参考以下文章

DDOS攻击网站能不能被防御呢?

全球银行网站成黑客主攻目标 阿里云提供安全防御应急方案

如何防御黑客利用metaploit发起的攻击 黑吧安全网

棋牌游戏被攻击如何防御黑客?

java的框架(比如struts2)对于xss攻击、sql注入等黑客方式有防御么?

2017-04-20Sql字符串注入式攻击与防御