C#知识点-22(ADO.NET五个对象,SQL漏洞注入攻击)

ADO.NET

概念:ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO的类用类操作文件一样,System.Data这组类是用来操作数据库的(不光是MSSql Server),它提供了统一的编程接口让操作其他数据库(Access、Oracle等)的方式和操作MSSQL Server一致
组成:

Connection 连接数据库
Command 执行数据库语句
DataReader 只读只进的结果集
DataAdapter
DataSet 断开时连接的数据库操作

ADO.NET访问数据库的方式:

一、
        1、连接数据用Connection
        2、执行SQL语句Command
        3、执行完毕之后将结果一条一条返回。DataReader
二、
        使用DataAdapter+DataSet,这种方法本质还是通过Connection、Command、DataReader将数据全部取出来然后放到了DataSet中。//看DataAdapter的构造函数

ADO.NET连接池

由于每次正常连接数据库都会至少执行三个操作(1、登录数据库服务器  2、执行操作  3、注销用户),所以每次通过Connection向数据库服务器申请一个连接都比较耗时。【ADO.NET默认启用连接池】
为了解决上述问题,ADO.NET采用了连接池的概念

Command对象

操作Sql Server数据库使用SqlCommand对象
SqlCommand表示向服务器提交的一个命令(SQL语句等),CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等)
常用的三个方法:
        1、ExecuteNonQuery()        执行对数据库的增删改,返回收影响的行数
        2、ExecuteScalar()        执行查询,返回首航首列
        3、ExecuteReader()        执行查询,返回DataReader对象;执行有多行结果集的用ExecuteReader

HasRow属性返回是否有行

ADO.NET异常处理

在执行数据库操作时,如果数据库服务器未打开,或者sql语句写错了会怎么样?(delete无效、违反约定、数据库服务出问题)
这些情况可以用try...catch...finally来捕获异常
使用异常处理可以保证一个功能出错不影响另一个功能,比如添加操作失败,不影响查询的操作

SQL注入漏洞攻击

登录判断:select * from T_Users where UserName=... and Password=...,将参数拼到SQL语句中。

构造恶意的Password: ' or '1'='1

防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值

SQL语句使用@UserName表示“此处用参数代替”,向SqlCommandParameters中添加参数

cmd.CommandText = "select * from [user] where uUserName=@UserName and uPwd=@Password";
cmd.Parameters.Add(new SqlParameter(“@ UserName ","admin"));
cmd.Parameters.Add(new SqlParameter(“@ Password ",password));

参数在SQL Server内部不是简单的字符串替换,SQLServer直接用添加的值进行数据比较,因此不会有注入漏洞攻击


{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){if (IsInput()){if (IsLogin(txtUserName.Text.Trim(),txtUserPwd.Text.Trim())){MessageBox.Show("登陆成功");}else{MessageBox.Show("登陆失败");}}else{MessageBox.Show("请完整输入用户名和密码");}}bool IsInput(){if (txtUserName.Text.Length==0||txtUserPwd.Text.Length==0){return false;}return true;}bool IsLogin(string name,string pwd){string conStr = "Data Source = .;Initial catalog = MySchool; uid = sa; pwd = root";//创建连接对象using (SqlConnection con = new SqlConnection(conStr)){//以下三条语句都可以让攻击者进行Sql漏洞注入攻击//string sql = "select count(*) from [user] where uname = '" + name + "'and pwd = '" + pwd + "'";//string sql = string.Format("select count(*) from [user] where uname = '{0}' and upwd ='{1}'", name, pwd);//string sql = $"select count(*) from[user] where uname ='{name}' and upwd = '{pwd}'";//使用参数化避免漏洞注入攻击string sql = "select * from [user] where uname = @name and upwd = @pwd";//创建command对象using (SqlCommand cmd = new SqlCommand(sql,con)){//开启连接con.Open();//创建两个参数对象,把参数和变量的值进行绑定,防止sql漏洞注入SqlParameter param1 = new SqlParameter("@name", name);SqlParameter param2 = new SqlParameter("@pwd", pwd);//把两个参数对象,赋值给cmd对象的Parameters集合进行维护//解析sql语句的时候,会从Parameters集合中,把两个参数的值,进行提取,然后跟sql进行拼接//这是避免sql漏洞注入的核心cmd.Parameters.Add(param1);cmd.Parameters.Add(param2);//执行查询,返回一个DataReader对象SqlDataReader reader = cmd.ExecuteReader();if (reader.HasRows){return true;}else{return false;}}}}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Windows 常用工具系列 14 -- windows 网络驱动映射】

文章目录 windows 网络驱动映射 windows 网络驱动映射 映射网络驱动器的意思是将局域网中的某个目录映射成本地驱动器号。 在windows上将服务器目录映射到本地盘: 进入到服务器执行下面命令既可以看到对应的 IP地址: 将对应的IP地址填入上图中。 映…

Synchronized(三:JVM中锁的优化)

简单来说在JVM中的monitorenter和monitorexit字节码依赖于底层的操作系统的Mutex Lock来实现的,但是由于使用Mutex Lock需要将当前线程挂起并从用户态切换到内核态来执行,这种切换的代价是非常昂贵的;然而在现实中大部分情况下,同…

C++ Floyd求最短路 Floyd算法(多源汇最短路)

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。 再给定 k 个询问,每个询问包含两个整数 x 和 y ,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。 数据…

docker部署前后端分离项目

docker部署前后端分离项目 前提,服务器环境是docker环境,如果服务器没有安装docker,可以先安装docker环境。 各个环境安装docker: Ubuntu上安装Docker: ubuntu离线安装docker: CentOS7离线安装Docker: Cen…

类与对象-对象特性

师从黑马程序员 对象的初始化和清理 构造函数和析构函数 用于完成对象的初始化和清理工作 如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数是空实现 构造函数:主要用于创建对象时为对象的成员属性赋值,构造函数由编…

什么是机器视觉?

什么是机器视觉 近年来,人工智能渐渐成为一个热点话题。作为人工智能领域的一个分支,图像处理技术也随之发展到了一个新的高度,各种新的软件工具、算法库、开源资料不断涌现,各行各业也渐渐开始进行技术变革。比较典型的例子是&a…

【论文笔记】Gemma: Open Models Based on Gemini Research and Technology

Gemma 日期: March 5, 2024 平台: CSDN, 知乎 状态: Writing Gemma: Open Models Based on Gemini Research and Technology 谷歌最近放出的Gemma模型【模型名字来源于拉丁文gemma,意为宝石】采用的是与先前Gemini相同的架构。这次谷歌开源了两个规模的模型&…

【2024】vue-router和pinia的配置使用

目录 vue-routerpiniavue-routerpinia进阶用法---动态路由 有同学在项目初始化后没有下载vue-router和pinia,下面开始: vue-router npm install vue-router然后在src目录下创建文件夹router,以及下面的index.ts文件: 写进下面的…

短剧小程序:掌中剧院,随时上演

在繁忙的生活节奏中,我们总渴望找到一片属于自己的休闲空间。短剧小程序,就是这样一处随时随地都能让你沉浸其中的掌上剧院。无论你在何处,无论何时,只要轻轻一点,精彩纷呈的短剧即刻上演。 一、掌中剧院,…

学习Java的第二天

如何使用文本文档在cmd里打印出HelloWorld 1、创建一个文本文档,并命名为HelloWorld,将后缀改为java(需要自己去把后缀打开显示出来) 2、打开编辑 也可以双击打开 3、在里面写出以下代码 上面红框里为你要打印的语句,…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …

【C++】102.二叉树的层序遍历

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例 2&#xff1…

自学Java的第二十一天(在学校版)

一,每日收获 类与对象 1.看一个养猫猫问题 2.使用现有技术解决 Object01.java 3.类与对象的关系示意图 4.快速入门 5.类和对象的区别和联系 6.对象在内存中存在形式 7.属性/成员变量/字段 8.如何创建对象 9.如何访问属性 二,新名词与小技巧 三…

【Linux】Linux网络故障排查与解决指南

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 检查网络连接状态: 检查路由表: 检查DNS配置: 检查网络连接状态: 检查防火墙设…

Igraph入门指南 2

3、图的基本要素——边(Edge|Arc) 图的最本质的内容是一种二元关系,如果给这种二元关系赋予一个方向,就产生了有向图和无向图的分类,在教材中,无向的边叫Edge,有向的边叫Arc,另外,根据两个顶点…

KOA优化高斯回归预测(matlab代码)

KOA-高斯回归预测matlab代码 开普勒优化算法(Kepler Optimization Algorithm,KOA)是一种元启发式算法,灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度,每个行星代表一个候选解,在…

指针数组初始化,不常见啊

今天无意间看到这样一段代码,因为还是第一次看到,这是glibc库里的代码,写出来分享一下: #ifndef ERR_MAP # define ERR_MAP(n) n #endif const char *const _sys_errlist_internal[] { #define _S(n, str) [ERR_MAP(n)] …

WebGIS开发0基础必看教程:矢量查询

1.前言 在第七章里我们知道了WebGIS中要素的本质是UIComponent,而矢量图层的本质是包含了n(n>0)个UIComponent的Canvas。我们在UIComponent的graphics中,根据矢量数据画出矢量的形状(shape),并且将矢量数据的属性(…

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多,包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢?只需要简单几步即可,具体如下&#xff1a…

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司?

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…