当前位置:Gxlcms > 数据库问题 > 从SQL注入谈数据访问层

从SQL注入谈数据访问层

时间:2021-07-01 10:21:17 帮助过:2人阅读

sql="select * from UserBase where Id=‘"+txtId.text+"‘ and pwd=‘"+txtpwd.text+""; //使用‘’“”的方式将用户输入的值包裹起来构建SQL语句 demo

这时我们只要在“txtId”这个文本框中输入“ ‘ or 1=1 -- ”这样不管他输入的账号和密码是否正确他都可以成功登陆你的应用程序,甚至还可以用这种方式自己构建SQL语句直接对你的系统级别的数据库进行操作

参数化命令

上面讲述的这种构建SQL语句的方式很容易受到SQL注入的攻击,而使用参数化命令可以有效的防止SQL注入的攻击。

如下:

技术分享

  1. <span style="color: #008080"> 1</span> <span style="color: #0000ff">string</span> sql ="<span style="color: #8b0000">select * from UserBase where Id=@Id and pwd=@pwd</span>";<span style="color: #008000">//使用占位符来占位</span>
  2. <span style="color: #008080"> 2</span> <span style="color: #008000">//给占位符赋值</span>
  3. <span style="color: #008080"> 3</span> SqlParameter sp1=<span style="color: #0000ff">new</span> SqlParameter("<span style="color: #8b0000">@Id</span>",txtId.Text);
  4. <span style="color: #008080"> 4</span> SqlParameter sp2=<span style="color: #0000ff">new</span> SqlParameter("<span style="color: #8b0000">@pwd</span>",txtpwd.Text);
  5. <span style="color: #008080"> 5</span> <span style="color: #008000">//将参数值与Command对象关联</span>
  6. <span style="color: #008080"> 6</span> cmd.Parameters.Add(sp1);
  7. <span style="color: #008080"> 7</span> cmd.Parameter.Add(sp2);
参数化命令的SQL语句

上面示例中使用占位符来标示在程序运行过程中需要动态进行替换的值,通过在SQL文本参数前面加@符号实现。

ADO.Net命令对象使用一个集合保存离散的参数类型(3、4行代码),即Parameters集合。

用户可以添加任意多的参数对象并映射到SQL语句中的占位符(6、7行代码)。

SqlParameter类的常用属性

DbType 获取或设置参数的DbType
Direction 获取或设置一个值,该值指示参数是只可输入,只可输出还是双向存储过程返回值参数
IsNulllable 获取或设置一个值,该值指示参数是否接收空值
ParameterName 获取或设置SqlParameter的名称
Size 获取或设置列中数据的最大值
SqlDbType 获取或设置参数的DbType
Value 获取或设置该参数的值

用ADO.NET调用存储过程

  1. 在数据端编写存储过程

  2. 调用存储过程

    1. 为Command对象指定存储过程名称

      技术分享
      1. <span style="color: #008080"> 1</span> cmd.CommandText="<span style="color: #8b0000">Name</span>";
      demo
    2. 指定Command对象的命令类型 技术分享
      1. <span style="color: #008080"> 1</span> cmd.CommandType=CommandType.StoredProcedure;
      demo

  3. 存储过程返回值

         如果存储过程具有输出参数,在执行存储过程后可以通过再次访问命令对象的参数集合取得输出参数的值

从SQL注入谈数据访问层

标签:

人气教程排行