SQL注入漏洞是个老话题了,在以前做ASP做开发时,就经常需要用字符串的过虑等方式
来解决这个问题,但有时候确做的不够彻底,往往让***钻了空子。
那么目前在我们.NET中,不管是用WINFORM开发还是用WEBFORM,连接数据库时都
可以使用ADO.NET,在ADO.NET中,可以设置和获取命令对象的参数来有效的防止SQL
注入问题。不过,在网上查看很多有关ASP.NET的防注入贴子中还有很多是使用以前的
老办法,字符串的过虑,在这里,我们再给大家推荐使用ADO.NET中的参数集合这种方
式,希望能对各位有所帮助。
首先我们来了解一下SQL注入漏洞:
SQL注入就是用户通过客户端请求GET或POST方式将SQL语句提交到服务端,欺骗服务
器去执行恶意的SQL语句。比如:
做一个用户的登录的SQL语句:
string strSql = "Select * From Users Where UserName='"+name+"' and UserPwd
'"+pwd +"';
如果在登录时输入or 1=1这样的内容的话,name和pwd的值就会跟着改变,那我们来看
下这条SQL语句:
SELECT * from Users WHERE UserName = '' or '1'='1' AND UserPwd = '' or '1'='1'
这样的话可以直接查出记录,那自然就会登录成功,这样的程序简直是不设防的:),
当然,SQL注入漏洞还有很多方式,我们就不在这里详细表述,我们的主题是如何
在.NET的ASP.NET或WINFROM中使用ADO.ENT来解决这个问题。
问题的解决办法:
还是我们刚刚的Users表,现在我要写个方法,为该表里插入记录,如下:
 
public int Insert(string name, string pwd)
{
                string strSql = "Insert into Users(UserName,UserPwd)values('"+name+"','"+pwd+"')";
                OleDbCommand cmd = new OleDbCommand(strSql,Conn);
                Conn.Open();
                int i=cmd.ExecuteNonQuery();
             Conn.Close();
             return i;
}
以上的方法中就存在SQL注入的问题,那么如何使用ADO.NET中的叁数集合呢?
接下来再看一段代码:
public int Insert(string name, string pwd)
{
                string strSql = "Insert into Users(UserName,UserPwd)values(@name,@pwd)";
                OleDbCommand cmd = new OleDbCommand(strSql,Conn);
                cmd.Parameters.Add("@name", OleDbType.VarChar).Value = name;
                cmd.Parameters.Add("@pwd", OleDbType.VarChar).Value = pwd;
                Conn.Open();
                int i=cmd.ExecuteNonQuery();
             Conn.Close();
             return i;
}
以上的方法中使用了参数集合,这样的话就有效的避免了SQL的注入问题,接下来我们了解一下参数集合:
在ADO.NET的命令对象中,是可以使用参数集合的,如:(例如 )该集合中包含一组类型为 、、 或 的对象。对于需要传递的每个参数,集合中均有一个对应的参数对象。

参数的数据类型特定于 .NET Framework 数据提供程序。 如果指定类型,则会在将 Parameter 的值传递给数据源之前,将该值转换为 .NET Framework 数据提供程序类型。 您还可以通用形式指定 Parameter 的类型,方法是将 Parameter 对象的 DbType 属性设置为特定 。
Parameter 对象的 .NET Framework 数据提供程序类型是根据 Parameter 对象的 Value 的 .NET Framework 类型或 Parameter 对象的 DbType 推断出来的。
有的朋友可能想要知道如何在DataAdapter对象中使用参数,其实也可以用Parameter 来做为参数,做法如下:
public DataTable List(int id)
{
                string strSql="Select * From Users Where id=@id";
                OleDbCommand cmd = new OleDbCommand(strSql,Conn);
                cmd.Parameters.Add("@id", SqlDbType.int).Value = id;
                OledbDataAdapter da= new OledbDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);    
             retrun dt;
}
关于这方面的问题,和Parameter 的使用方式有很多,我们这里只是举了个简单的例子让大家加以应用。

转载于:https://blog.51cto.com/jianle/131754

使用ADO.NET的参数集合来有效防止SQL注入漏洞相关推荐

  1. WordPress ProPlayer插件‘id’参数SQL注入漏洞

    漏洞名称: WordPress ProPlayer插件'id'参数SQL注入漏洞 CNNVD编号: CNNVD-201305-468 发布时间: 2013-05-22 更新时间: 2013-05-22 ...

  2. php post防止hash攻击,MyBB editpost.php脚本'posthash' 参数SQL注入漏洞

    发布日期:2012-12-14 更新日期:2012-12-18 受影响系统: MyBB MyBB 1.x 描述: ------------------------------------------- ...

  3. SQL注入漏洞测试(参数加密)

    SQL注入漏洞测试(参数加密) <此WEB业务环境对参数进行了AES加密,为了防止参数产生SQL注入,也是防止SQL注入产生的一种方法,但是这种方式就安全了么?1.掌握信息泄露的方式:2.了解A ...

  4. Goby 漏洞更新 | 铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞

    漏洞名称:铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞 English Name:MCMS list Interface sqlWhere Sql Injection Vul ...

  5. mysql bind param_mysql绑定参数bind_param原理以及防SQL注入

    下面我们来模拟一个用户登录的过程.. $username = "aaa"; $pwd = "pwd"; $sql = "SELECT * FROM t ...

  6. 本地复现Zabbix v2.2.x, 3.0.0-3.0.3 jsrpc 参数 profileIdx2 SQL 注入漏洞

    靶场地址:http://192.168.253.131:8000/ poc打包后台上传 转载于:https://www.cnblogs.com/Expioit/p/9036725.html

  7. mysql防注入插件_MyBB HM_My Country Flags 插件'cnam'参数SQL注入漏洞

    发布日期:2012-12-24 更新日期:2012-12-28 受影响系统: MyBB HM_My Country Flags 1.1 描述: ---------------------------- ...

  8. SQL 注入工具集合

    众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL注入工具可帮助管理员及时检测存在的漏洞. BSQL Hacker B ...

  9. 强大的PHP防SQL注入类,可以过滤敏感参数

    这是一个考虑比较全面的php和sql结合的防注入程序,在php方便主要对get,post,cooke,files进行了过滤,在sql中我们就对delete,update一些查询命令进行检测过滤. SQ ...

最新文章

  1. 闭包block多种应用方式
  2. 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
  3. XmlHttp学习笔记
  4. python3 str is not callable 问题解决
  5. 通过VsPhere体验MAC OS X
  6. php中oop类,phpOOP类的用法_PHP教程
  7. 深圳某集团招聘信息安全工程师
  8. 老李说事:性能测试服务日记
  9. 20170708xlVBA添加新产品修改公式
  10. 数值计算(四)——插值法(3)Hermite插值法
  11. 远程桌面管理工具的使用
  12. 一键logo生成器_logo制作助手下载-logo制作助手APP免费版下载v1.1
  13. 软件测试自动化测试工具有哪些?常见的自动化工具简介
  14. php去除字符串中的HTML标签
  15. matlab在电磁场方向,基于matlab的电磁场仿真与分析探究.pdf
  16. 滴滴打车CTO张博:生死战役,技术和时间赛跑
  17. DOTA数据集 | 数据前后处理操作系列
  18. python爬虫项目-优美图库
  19. LeetCode每日一题11.8
  20. 时域变换到频域?到底什么是傅里叶变换?

热门文章

  1. Rafy 框架 - 幽灵插件(假删除)
  2. nginx连接uwsgi使用web.py框架构造pythonweb项目
  3. 分析纯文本外链在SEO优化方面的作用
  4. Android类参考---Fragment(一)
  5. 怎样判断ios app 第一次启动
  6. vue xunidom_vue的虚拟dom(Virtual DOM )
  7. python判断字符大小写转换_Python 字符串大小写转换的简单实例
  8. 公钥,私钥和数字签名
  9. Shell_mysql命令以及将数据导入Mysql数据库
  10. 转:VC6.0与VC.net的具体区别