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 > )
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#-黑客-数据库访问-字符串的攻击和防御的更多相关文章
- 【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类
字符串攻击 所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作 在用户输入界面输入 a');up ...
- 【2017-04-20】Sql字符串注入式攻击与防御
一.攻击 所谓sql字符串注入式攻击就是在用户输入界面输入一串sql语句,来改变C#中连接数据库要执行的sql语句 通过你写的程序,直接来执行我想要执行的sql语句 例如:在这么一个程序中,sname ...
- [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)
[入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date 周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
- [开源].NET数据库访问框架Chloe.ORM
扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...
- 数据库访问性能优化 Oracle
特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...
- 我也来写:数据库访问类DBHelper
一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...
- step by step 之餐饮管理系统六(数据库访问模块)
距上次写的博客已经好几个月,一方面公司里面有很多的东西要学,平时的时候又要写代码,所以没有及时更新,不过现在还好,已经成型了,现在把之前的东西贴出来,先看一下现在做的几个界面吧.第一个界面是用颜色用区 ...
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...
随机推荐
- [No000062]读书八字诀:怎样将书读得通透?
从吃透到通透 有种说法,吃透一本书,才算好好读过.然而比吃透境界更高,是通透.吃透仅限于书中内容,通透则是将书中内容与正反上下.古今中外背景知识相互关联. 当你做到读书通透,收获将远远大于手头那一本书 ...
- [No000009]学习重要还是经营人脉重要?
大说数人的朋友圈都是这样的:雪中送炭的寥寥无几,锦上添花的大多数人连你自己都不认识,碰到倒霉的时候还能遇到落进下石的.人脉是很重要,可相对自身的学习来说,就没有想象中那么重要了. 有一次在北大讲座,遇 ...
- 一个简单的socket程序运行与抓包查看
为了熟悉socket编程,在ubuntu下运行了一个现有例子(Networking and Socket programming tutorial in C - CodeProject),并通过抓包查 ...
- Linux—C内存管理
程序(可执行文件)存储结构与进程存储结构: 查看文件基本情况:file fileName.查看文件存储情况:size fileName(代码区text segment.全局初始化/静态数据区data ...
- C# — FileHandler
学会使用OpenFileDialog和SaveFileDialog控件浏览和选择文件.使用System.IO.File和System.IO.Directory的对象来操纵文件系统(文件和目录). 在F ...
- IE兼容forEach/map/every/some/indexOf/filter
some if (!Array.prototype.some){ Array.prototype.some = function(fun /*, thisArg */) { 'use strict'; ...
- 小心 CSS3 Transform 引起的 z-index "失效"
https://www.douban.com/note/343402554/ http://www.jb51.net/css/255811.html 最后我直接removeClass;把transfo ...
- 返回标量CLR自定义函数
昨天有学习了返回表自定义函数<CLR Table-Valued函数>http://www.cnblogs.com/insus/p/4378354.html.今天学习另一个,实现返回标量(S ...
- NET代码重构
记一次.NET代码重构 好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使 ...
- Linux shell运算符
双引号 --使用双引号可以引用除了字符$,`(单反号),\(反斜杠)外的任意字符或者字符串 --echo "参数的个数是$#" 单引号 --单引号与双引号类似,不同的是shell会 ...