日期:2014-05-20  浏览次数:20463 次

救命!ASP.net怎么样防注入啊!!!!
各位好,我是菜鸟问个问题,我用的Access数据库(某些原因只能用这个),所以我用的都是拼接的SQL语句,比如登陆select   name,pwd   frm   users   where   name= ' "+txtName.Text+ " '   and   ...
这样来做的,但是我在登陆的时候用 'or '= 'or ',密码也是,结果就进去了,请问各位有什么好办法能解决啊,我是菜鸟,急需解答,能详细点最好了,谢谢谢谢

------解决方案--------------------
防注入最有效的方法是用存储过程
------解决方案--------------------
写SQL语句时最好用参数传递。或者写存储过程,防注入最有效
------解决方案--------------------
对,最好用存储过程!
------解决方案--------------------
小问题,用select name,pwd frm users where name= ' "+txtName.Text+ " '打开数据库选择用户,然后再取得该记录的密码字段再进行比较就行了,注入就没效果了。但如果你用select name,pwd frm users where name= ' "+txtName.Text+ " and pwd=....来鉴别用户的合法性,就防不了注入了。
------解决方案--------------------
支持传参
------解决方案--------------------
ASP代码如例:
login=0
sqlstr= "select name,pwd frm users where name= ' "+txtName.Text+ "
rs.open sqlstr,cn,1,1
if not rs.eof then
if txtPwd.Text=rs.field( "pwd ").value then
login=1
end if
end if
rs.close
注意:login=1表示登陆成功
------解决方案--------------------
http://blog.csdn.net/jxufewbt/archive/2006/04/26/677728.aspx
------解决方案--------------------
Access没有存储过程,但参数化查询语句并不一定得用存储过程,在.net文档中搜索OleDbParameter类的说明,里面就有用?来传参数的示例。
------解决方案--------------------
非StoreProcedure的SqlCommand也是可以有Parameter的
也是在语句里加“@变量名”

最好把所有的数据都封装为类(DataSet也可以啦)

分层,用业务逻辑层来控制数据的有效性和合法性
------解决方案--------------------
楼上说的对,也许是“注入”可以让人联想到给肉注水,大家都过于喜欢这个简单的问题了。

这个查询语句写为:

string SQL= "select name,pwd frm users where name= ' "+txtName.Text.Replace( " ' ", " ' ' ")
+ " ' and ...

这就可以了。