ADO学习笔记之注入漏洞与参数化查询
ADO学习笔记之注入漏洞与参数化查询
作为新手,在学习ADO程序时,使用 sql 语言查询数据时,很容易写类似如下代码:
using (SqlConnection con = new SqlConnection(ConnectionString))
{
string cmdText = "select Flag from UserLogin where UserName='@UserName' and UserPwd='@Password'";
cmdText.Replace("@UserName",userName);
cmdText.Replace("@Password",userPwd);
using (SqlCommand cmd = new SqlCommand(cmdText, con))
{
con.Open();
......
con.Close();
}
}
在这里,通过String的Replace方法,用目标字符串替换原字符串中的占位符(不处理替换)。那么问题来了。如果userName为任意值,但userPwd="1‘ or 1='1",这样cmdTex的值就是"select Flag from UserLogin where UserName='@UserName' and UserPwd='1’ or 1='1'" 很明显,查询结果恒为真,这样即便不知道用户与密码也可以随时访问数据库。
为了解决这个问题,比较好的方法就是使用参数化查询,看下面的代码:
using (SqlConnection con = new SqlConnection(ConnectionString))
{
string cmdText = "select Flag from UserLogin where UserName=@UserName and UserPwd=@Password";
using (SqlCommand cmd = new SqlCommand(cmdText, con))
{
cmd.Parameters.Add(new SqlParameter("UserName", userName));
cmd.Parameters.Add(new SqlParameter("Password", userPwd));
con.Open();
......
con.Close();
}
}
在原字符串中也是用@UserName与@Password占位,但注意这里的占位符没有用 引号 引起来,再通过 SqlParameter这个类对占位符进行替换(处理后替换)。替换时对应的是一对一替换(@UserName对应UserName,@Password对应Password),并且原字符串有多少个查询参数,那么替换后也就只有这么多参数(像上面的例子,不经过处理替换导致原字符串中的参数增加了,增加的参数就是 ‘1’ )。
在写ADO代码时,通过参数化查询可以有效的避免查询漏洞。
ADO学习笔记之注入漏洞与参数化查询的更多相关文章
- Web安全学习笔记 SQL注入下
Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...
- Web安全学习笔记 SQL注入上
Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...
- Web安全学习笔记 SQL注入中
Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...
- Web安全测试学习笔记-DVWA-SQL注入-2
接上一篇SQL注入的学习笔记,上一篇我通过报错信息得知后台数据库是MySQL(这个信息非常重要~),然后通过SQL注入拿到了用户表的所有行,其实我们还可以通过MySQL的特性来拿更多的信息. 1. 获 ...
- Spring 学习笔记 ----依赖注入
依赖注入 有三种方式,本文只学习下属性注入. 属性注入 属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...
- 2020/1/27代码审计学习之SQL注入漏洞
PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...
- Web安全学习笔记——SQL注入
一.MySQL注入 1. 常用信息查询 常用信息: 当前数据库名称:database() 当前用户:user() current_user() system_user() 当前数据库版本号:@@ver ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Web安全测试学习笔记-SQL注入-利用concat和updatexml函数
mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...
随机推荐
- .net 缓存之文件缓存依赖
CaCheHelp 类中代码如下: #region 根据键从缓存中读取保持的数据 /// <summary> /// 根据键从缓存中读取保持的数据 /// </summary> ...
- 项目积累demo-01
1 搭建Spring-Boot项目 在这里我使用intellij新建spring boot工程: 点击next; 输入Group以及artifact之后.点击next.之后点击web.接着finish ...
- linux 安装 elasticsearch
安装 Java 8 当你提前在使用 Elasticsearch,你开始寻找更好的 Java 性能和兼容性时,您可以选择安装 Oracle 的专有 Java (Oracle JDK 8). 将 Orac ...
- SpringBoot04 SpringBoot 和 MyBatis 整合
1 所需的jar包 mysql驱动包:mysql-connector-java 数据库链接池:druid mybatis对应jar包:mybatis-spring-boot-starter 分页查询对 ...
- p2371&bzoj2118 墨墨的等式
传送门(bzoj) 题目 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存 ...
- window.parent ,window.top,window.self 详解及parent和opener的区别
window.parent ,window.top,window.self 详解 在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层fr ...
- 【转】ANT安装、环境变量配置及验证
http://www.cnblogs.com/yuzhongwusan/archive/2013/03/26/2982411.html Posted on 2013-03-26 14:01 yuzho ...
- 洛谷P1092 虫食算
P1092 虫食算 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: http://paste.ubuntu.com/2544 ...
- bzoj1227: [SDOI2009]虔诚的墓主人(树状数组,组合数)
传送门 首先,对于每一块墓地,如果上下左右各有$a,b,c,d$棵树,那么总的虔诚度就是$C_k^a*C_k^b*C_k^c*C_k^d$ 那么我们先把所有的点都给离散,然后按$x$为第一关键字,$y ...
- scrapy框架爬取蜂鸟网的人像图片
今天有点无聊,本来打算去蜂鸟网爬点图片存起来显得自己有点内涵,但是当我点开人像的时候就被里面的小姐姐所吸引了,下面就是整个爬图片的思路和过程了 第一步:先创建一个爬虫项目 scrapy startpr ...