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. 怎样关闭WIN7系统的自动更新

    百度经验 > 游戏/数码 > 电脑 > 电脑软件 怎样关闭WIN7系统的自动更新 听语音 | 浏览:108460 | 更新:2012-07-24 18:03 | 标签:win7 1 ...

  2. 如何在Kali Linux下编译Windows Exploit

    前言 微软的Windows在企业或是个人应用领域占据着最大的市场份额,在渗透测试过程中你会经常遇到很多Windows的工作站和服务器.另一方面,大多数渗透测试人员主要使用基于Linux的发行版渗透测试 ...

  3. two sample ttest & paired ttst

    来源:http://www.pinzhi.org/thread-1023-1-1.html 成对t检验Paired Test是对来自同一总体的样本,在不同条件影响下获取的2组样本进行分析,以评价不同条 ...

  4. Kibana+X-Pack

    Kibana+X-Pack介绍使用(全)   Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作.Kibana目前最 ...

  5. C语言 malloc()与sizeof运算的盲点

    //malloc()与sizeof运算的盲点 #include <stdio.h> #include <stdlib.h> #include <string.h> ...

  6. jboss:跟踪所有sql语句及sql参数

    默认情况下,hibernate/JPA 在server.log中记录的SQL语句,参数都是用?代替的,这样不太方便. 网上留传的p6spy在最新的jboss上(EAP 6.0+版本)貌似已经不起作用了 ...

  7. RelayCommand

    RelayCommand Mvvm最大的特点就是分离了View和ViewModel,将数据的显示和业务逻辑分开.使用WPF的Binding,我们不仅能够 将数据从ViewModel绑定到View,同时 ...

  8. 求解最大正方形面积 — leetcode 221. Maximal Square

    本来也想像园友一样,写一篇总结告别 2015,或者说告别即将过去的羊年,但是过去一年发生的事情,实在是出乎平常人的想象,也不具有代表性,于是计划在今年 6 月份写一篇 "半年总结" ...

  9. ASP.NET MVC3入门教程之环境搭建

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=90&extra=page%3D1 什么是ASP.NET MVC ...

  10. 新时代的coder如何成为专业程序员

    在移动互联网"泛滥"的今天,越来越多非专业(这里的非专业指的是非计算机专业毕业的程序员)程序员加入到了IT行业中来了,可能是因为移动互联网的火爆导致程序员容易就业而且工资很高,可能 ...