在一个用户名和密码的登录界面中,为什么通过输入参数的问题就可以解决   '  or 1=1 --  登录的问题?  下面是看教程的一些源码业务逻辑层
string strQuery = "select 学号,密码 from 学生名单 where 学号=@userName and 密码=@userPwd";
 SqlParameter[] sqlParameter =
 { new SqlParameter("@userName",userName.Trim()),
   new SqlParameter("@userPwd",userPwd.Trim())               
};
   DBhelper db = new DBhelper();
   return db.ExecuteQuery(strQuery,sqlParameter);数据访问层SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = new SqlCommand(strSql, sqlConnection);
sqlDataAdapter.SelectCommand.Parameters.AddRange(sqlPar);
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
return dataTable;

解决方案 »

  1.   

    使用参数能帮你过滤数据,防止SQL注入
      

  2.   

    哪句是过滤数据啊?
    new SqlParameter("@userPwd",userPwd.Trim()) 这句也只是把字符串"'  or 1=1 --"两边的空格去掉,也起不到作用啊?有点不明白
      

  3.   

    不知道,但是以前做的一个是通过动态生成SQL的方式。
      

  4.   

    过滤‘号和空格。插入前先检查sql注入的关键词。
    除单纯字母数字外都不能包含。。
    其次限制参数长度sql注入也就没用了
    最好用参数形式
      

  5.   

    一:使用参数二:传入@userName ,查询返回密码,再用界面层的密码与数据库得到的密码相比较。
      

  6.   

    sqlParameter 
    就是为了防止sql注入而产生的,个人是这么理解的
    当然其实不是这样的
    sqlParameter  其实是当你的有些数据有特殊符号的时候,而把特殊符号当作普通的数据处理,所以在此情况下,也有可以防止sql注入的问题了
      

  7.   

    如果这些数据里面确实需要这些特殊符号呢?
    所以还是用参数化SQL语句好。
    sqlParameter 
    就是为了防止sql注入而产生的,个人是这么理解的 
    当然其实不是这样的 
    sqlParameter  其实是当你的有些数据有特殊符号的时候,而把特殊符号当作普通的数据处理,所以在此情况下,也有可以防止sql注入的问题了
      

  8.   

    在ADO.NET中使用参数化SQL语句的大同小异 
    在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Oracle中Clob字段等)使用参数化SQL语句很容易就能赋值,所以本人经常在ADO.NET中使用参数化SQL语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。asp.net夜话之七:ADO.NET介绍
    ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
    本篇中还讲述了自定义分页在数据库层的理论。