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 ...
随机推荐
- mybatis 学习一 总体概述
mybatis使用起来不复杂,大体上来说,就是将db连接信息,所有的sql语句信息,都放到配置文件里面,然后去读配置信息,根据db信息,创建好session工厂,然后拿到sqlsession回话之后, ...
- 利用java mail发送邮件
import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import java ...
- LoadRunner 服务器(Linux、Windows) 性能指标度量说明
服务器资源性能计数器 下表描述了可用的计数器: 监控器 度量 说明 CPU 监控器 Utilization 监测 CPU 利用率. 磁盘空间监控器 Disk space 监测可用空间 (MB) 和已用 ...
- 【总结整理】webstorm插件使用
<ul> <li><a href="#">1F 男装</a></li> <li><a href=&qu ...
- Java 常见注解
@Retention 1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略2.RetentionPolicy.CLASS —— ...
- Maven的pom实例
该pom中包含了一些我认为会需要的东西,并且加了注释.可以根据需求适当删减. 包含了spring-mvc , junit,hibernate验证,json,apache-commons组件 还有 co ...
- R语言 arules包 apriori()函数中文帮助文档(中英文对照)
apriori(arules) apriori()所属R语言包:arules Mining Associations w ...
- 【vue2.X+iview2.x】iView在非 template/render 模式下标签的转化
iView在非 template/render 模式下标签的转化. 以下组件,在非 template/render 模式下组件名要分隔: DatePicker:date-picker FormItem ...
- 在Visual Studio开发的项目中引用GAC中的dll
Open the windows Run dialog (Windows Key + r) Type C:\Windows\assembly\gac_msil. This is some sort o ...
- Hexo瞎折腾系列(9) - 网页标题崩溃特效
前言 本系列的所有修改均基于本系列第一篇中的新增文件(譬如custom.js),请先自行阅读Hexo瞎折腾系列(1) - 准备工作与简单美化:并按照文章所说自行修改代码或文件. 为网页添加标题崩溃特效 ...