在一个用户名和密码的登录界面中,为什么通过输入参数的问题就可以解决 ' 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;
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;
解决方案 »
- 未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中,怎么解决啊~~~谢谢了
- DataReader和DataAdapter的用法?
- 请教,C# winform 里怎么实现用户登录
- c#把datagridview中的数据添加到数据库
- 急!找不到类型或命名空间名称“DataContractAttribute”?
- 使用 mono.cecil,load 一个dll,创建里面定义的类的实例?
- 发包的源代码
- 谁知道压缩和解压缩怎么实现,请指教!!!
- c#中使用msflexgrid遇到的问题
- 请教下关于 父类如何调用子类方法的问题
- 这样把控件中得到的值转换成大写?
- Winform关于dataGridView控件的升序降序的箭头问题。。
new SqlParameter("@userPwd",userPwd.Trim()) 这句也只是把字符串"' or 1=1 --"两边的空格去掉,也起不到作用啊?有点不明白
除单纯字母数字外都不能包含。。
其次限制参数长度sql注入也就没用了
最好用参数形式
就是为了防止sql注入而产生的,个人是这么理解的
当然其实不是这样的
sqlParameter 其实是当你的有些数据有特殊符号的时候,而把特殊符号当作普通的数据处理,所以在此情况下,也有可以防止sql注入的问题了
所以还是用参数化SQL语句好。
sqlParameter
就是为了防止sql注入而产生的,个人是这么理解的
当然其实不是这样的
sqlParameter 其实是当你的有些数据有特殊符号的时候,而把特殊符号当作普通的数据处理,所以在此情况下,也有可以防止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除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
本篇中还讲述了自定义分页在数据库层的理论。