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学习笔记之注入漏洞与参数化查询的更多相关文章

  1. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

  2. Web安全学习笔记 SQL注入上

    Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...

  3. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  4. Web安全测试学习笔记-DVWA-SQL注入-2

    接上一篇SQL注入的学习笔记,上一篇我通过报错信息得知后台数据库是MySQL(这个信息非常重要~),然后通过SQL注入拿到了用户表的所有行,其实我们还可以通过MySQL的特性来拿更多的信息. 1. 获 ...

  5. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

  6. 2020/1/27代码审计学习之SQL注入漏洞

    PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...

  7. Web安全学习笔记——SQL注入

    一.MySQL注入 1. 常用信息查询 常用信息: 当前数据库名称:database() 当前用户:user() current_user() system_user() 当前数据库版本号:@@ver ...

  8. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  9. Web安全测试学习笔记-SQL注入-利用concat和updatexml函数

    mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...

随机推荐

  1. CSS之边距合并

    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 情况1:当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元 ...

  2. Pycharm的远程代码编辑

    作为一个从java转到python的程序猿,一直觉得python的远程代码调试能力不如java,远程调试一把需要各种改代码,牵扯到eventlet库的时候,问题就更严重,需要调整eventlet的各种 ...

  3. (转)JAVA中的权限修饰符

    注:本博文是转载的,原文地址:http://blog.csdn.net/xk632172748/article/details/51755438 Java中修饰符总结: 访问控制修饰符 访问控制修饰符 ...

  4. github 分支操作

    1.查看分支 1.查看本地分支 使用git branch命令,如下: $ git branch * master *标识的是你当前所在的分支. 2.查看远程分支 命令如下: git branch -r ...

  5. 获取显示屏的个数和分辨率 --- 通过使用OpenGL的GLFW库

    获取显示屏的个数和分辨率 - 通过使用OpenGL的GLFW库 程序 #include <iostream> // GLFW #include <GLFW/glfw3.h> i ...

  6. Sublime Text 3下安装Emmet的问题

    电脑装了Sublime Text 3,顺便安装了很多插件,今天编写前端HTML代码时,想用起前端常用的Emmet插件的功能,Emmet插件已经安装好了,奈何输入简写格式,按“CTRL+E”,没有反应. ...

  7. [WIP]Vue 基础

    创建: 2019/05/30 https://cn.vuejs.org/v2/guide/  安装 初期选择直接嵌入 <!-- 开发环境版本,包含了有帮助的命令行警告 --> <sc ...

  8. GVIM安装手记

    GVIM安装手记 1. 安装GIT及GVIM Downloa Git URL : https://gitforwindows.org/ Downloa GVim URL : https://www.v ...

  9. 一个MySQL中两表联合update的例子(并带有group by分组)

    内容简介 本文主要展示了在MySQL中,使用两表联合的方式来更新其中一个表字段值的SQL语句. 也就是update table1 join table2 on table1.col_name1=tab ...

  10. CTS/APIO后文化课游记

    根据ghj1222的尿性,干什么事都要写一个游记划水记啥的...然后就写嘛... 现在是5.30微机课,先开个坑,学校6.5放假,我将于6.5后开始更新本文 APIO回来后发生的事真的特别多...有的 ...