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 > )
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#-黑客-数据库访问-字符串的攻击和防御的更多相关文章

  1. 【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类

    字符串攻击 所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作 在用户输入界面输入  a');up ...

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

    一.攻击 所谓sql字符串注入式攻击就是在用户输入界面输入一串sql语句,来改变C#中连接数据库要执行的sql语句 通过你写的程序,直接来执行我想要执行的sql语句 例如:在这么一个程序中,sname ...

  3. [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)

    [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date  周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...

  4. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  5. [开源].NET数据库访问框架Chloe.ORM

    扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...

  6. 数据库访问性能优化 Oracle

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  7. 我也来写:数据库访问类DBHelper

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  8. step by step 之餐饮管理系统六(数据库访问模块)

    距上次写的博客已经好几个月,一方面公司里面有很多的东西要学,平时的时候又要写代码,所以没有及时更新,不过现在还好,已经成型了,现在把之前的东西贴出来,先看一下现在做的几个界面吧.第一个界面是用颜色用区 ...

  9. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

随机推荐

  1. jquery的ready方法(DOM是否加载完)详解与使用

    jquery的ready方法(准备DOM触发)还是比较复杂的,我们先看流程图:

  2. header

    本文分享几个php header函数的例子,有需要的朋友参考学习下. 转自:http://www.jbxue.com/article/php_header_x5hV63c.html 1,可以使用hed ...

  3. FMDB处理动态插入语句

    昨天做一个需求,参数的数量不确定,所以无法使用这个API: - (BOOL)executeUpdate:(NSString*)sql, ... 但是用 - (BOOL)executeUpdate:(N ...

  4. Linux中 groupadd 和 useradd 的命令说明

    groupadd [options] group 说明The groupadd command creates a new group account using the values specifi ...

  5. usb驱动开发16之设备生命线

    回到struct usb_hcd,继续努力的往下看. kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看hcd.c文件. static void hcd_ ...

  6. CentOS搭建socket5代理服务器

    1.安装socket5依赖包 yum -y install gcc automake make pam-devel openldap-devel cyrus-sasl-devel   2.下载ss5并 ...

  7. ViewModelLocator

    ViewModelLocator 这里先鼓舞下士气,ViewModelLocator很简单,甚至可以去掉,它不是Mvvm必须的.在初学Mvvm时,一般都是使用NuGet安装 MvvmLight框架,总 ...

  8. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  9. Python2.3-原理之语句和语法

    此节来自于<Python学习手册第四版>第三部分 一.python语句简介(第10章) 1.首先记得一个概念:a.程序由模块构成:b.模块包含语句:c.语句包含表达式:d.表达式建立并处理 ...

  10. JavaScript文件加载器LABjs API详解

    在<高性能JavaScript>一书中提到了LABjs这个用来加载JavaScript文件的类库,LABjs是Loading And Blocking JavaScript的缩写,顾名思义 ...