ADO.NET复习总结(3)--参数化SQL语句--防止sql注入式攻击
1、SQL 注入
2、使用参数化的方式,可以有效防止SQL注入,使用类parameter的实现类SqlParameter
Command的属性parameters是一个参数集合。
3、举例<查询学生表学生个数>
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection conn =new SqlConnection("server=.;database=dbtest;uid=sa;pwd=123") )
{
string sql = "select Count(*) from userinfo where username='" + textBox1.Text + "' ";
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
MessageBox.Show(i.ToString());
}
}
}
}
数据库为:
注意:运行代码为结果为
数据库中执行一遍代码:
结果执行正确,没有问题、
但是请看执行下面查询 (sql注入原理:攻击数据库的一种方式):
查询框中输入:
a' or 1=1 or 1='
在数据库中的代码为(加单引号):
select Count(*) from userinfo where username='a' or = or =''--这句永远为true
4、实行参数化
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection conn =new SqlConnection("server=.;database=dbtest;uid=sa;pwd=123") )
{
// string sql = "select Count(*) from userinfo where username='" + textBox1.Text + "' ";
string sql = "select count(*) from userinfo where username=@name";//参数化
SqlCommand cmd = new SqlCommand(sql,conn);
//加参数:cmd的parameters属性,一个参数用add方法
cmd.Parameters.Add(
new SqlParameter("@name", textBox1.Text)
);
conn.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
MessageBox.Show(i.ToString());
}
}
}
}
参数化语句执行过程:
(1)打开数据库工具->Profier工具(数据库分析监测工具)
(2)执行代码:输入a' or 1=1 or 1='
点击button后
(3)然后看下Profiler
exec sp_executesql N'select count(*) from userinfo where username=@name',N'@name nvarchar(16)',@name=N'a'' or 1=1 or 1='''--底下的代码
5、 PPT理论知识
(1)SQL注入漏洞攻击
(2)查询参数
ADO.NET复习总结(3)--参数化SQL语句--防止sql注入式攻击的更多相关文章
- 如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;)。
1.如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号(;). 2.select查询的多个字段之间要用逗号“,”分割,如果查询涉及多个表,那多个表之 ...
- 基于简单sql语句的sql解析原理及在大数据中的应用
基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...
- 第15讲:嵌入式SQL语句(动态SQL)
一.动态SQL概述 1. 静态SQL vs 动态SQL ①动态SQL是相对静态SQL而言的 ②静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量传递给SQL语句即可 specN ...
- mybatis日志,打印sql语句,输出sql
mybatis日志,打印sql语句,输出sql<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE ...
- C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】
为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:se ...
- LINQ to SQL语句对应SQL的实现
LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg LINQ ...
- sql语句优化SQL Server
MS SQL Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了 ...
- C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序
/// <summary>/// 单表(视图)获取分页SQL语句/// </summary>/// <param name="tableName"&g ...
- jboss:跟踪所有sql语句及sql参数
默认情况下,hibernate/JPA 在server.log中记录的SQL语句,参数都是用?代替的,这样不太方便. 网上留传的p6spy在最新的jboss上(EAP 6.0+版本)貌似已经不起作用了 ...
- 用SQL语句修复SQL Server数据库
使用数据库的过程中,由于断电或其他原因,有可能导致数据库出现一些小错误,比如检索某些表特别慢,查询不到符合条件的数据等. 出现这些情况的原因,往往是因为数据库有些损坏,或索引不完整. 在ACCESS中 ...
随机推荐
- JQ trigger函数无法触发a标签的两种解决方法
起因:点击icon图标后要触发a标签的链接转跳动作,但是用 JQ 的 $('#a').trigger('click') 居然不起作用,遂百度之,总结两种方法如下: (原因:JQ 的 trigger() ...
- PHP生成验证码
<?php check_code(); function check_code($width = 100, $height = 50, $num = 4, $type = 'jpeg') { $ ...
- thinkinginjava学习笔记06_复用类
MarsEdit粘代码好麻烦,所有代码交给github:https://github.com/lozybean/MyJavaLearning 复用一个类常用的两种方式:组合.继承: 组合 将对象引用置 ...
- SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法
使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java ...
- 通过tokenPlease()函数获取accessToken
作者:陈希章 发表于 2018年1月5日 这是一个很小的技巧,而且用几句话就能讲明白.事情是这样的,我最近在回顾之前写过的文章:通过其他第三方工具体验Microsoft Graph 的时候,发现最近的 ...
- MySQL优化四 索引优化
索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL ...
- Hibernate学习笔记(4)---hibernate的核心接口
Configuration类 该类主要是读取配置文件,启动hibernate,并负责管理hibernate的配置信息,一个程序只创建一个Configuration对象. Configuration类操 ...
- H2Engine游戏服务器设计之属性管理器
游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...
- JavaScript Html页面加载完成三种写法
//一.Html页面加载完成的JS写法 //1. $(function () { alert("窗体Html页面加载完成方法一"); }); //2. $(document ...
- duilib基本框架
最近我一个同学在项目中使用到了duilib框架,但是之前并没有接触过,他与我讨论这方面的内容,看着官方给出的精美的例子,我对这个库有了很大的兴趣,我自己也是初学这个东东,我在网上花了不少时间来找相关的 ...