文章来源:
西宁威势电子信息服务有限公司
发布时间:2011-3-19 浏览次数:13896 tags:OleDbParameter acces
在ASP.NET页面中,如果要用到LIKE语句查询,可以直接像写ASP一样拼接,这样查询是没有问题的,拼接出来的语句如下:
sql = @"select * from User where [UserName] like '%" + this.TB_UserName.Text + "%' and [National] like '%" + this.DDL_National.SelectedValue.ToString() + "%' ....
点击页面查询按钮,能正常返回结果。
当然稍有安全常识的人都知道,这样的写法直接拿到数据库查询是肯定会引起问题的,那就是SQL注入,所以在查询前一定要对拼接过来的值进行验证。但是验证的话又太麻烦,于是可以用参数式传递来解决,SQL语句如下:
sql = "select * from QhWins_soldier where [UserName] like '%@UserName%' and [National] like '%@National%' .....
OK,再进一步定义参数,把参数放在OleDbCommand 的实例cmd中去,带到数据库查询,哈哈,心里想的美滋滋的,测试一下,竟然查询不到任何结果,而页面也不报错,TMD,郁天下之大闷也!搞来搞去,原来是MS的BUG,美梦破裂!
于是走曲线救国,引入instr()函数,SQL语句如下:
sql = "select * from QhWins_soldier where instr([UserName],@UserName) and instr([National],@National) and ....
还是参数式传参,问题解决!
注意,用此方法还是要对参数进行过滤,不然还是会有注入的,测试方法:
.net 搜索注入,原创,哈哈
在搜索中输入
关键字) and (1=1 ,然后搜索,可以注入instr()函数,此方法适合注入:用ACCESS做的站,用到查询语句的时候。
原理:
语法错误 (操作符丢失) 在查询表达式......省略
改进后语句变成下面的,
'instr([Birthplace],西宁) and (1=1) order by [id] desc'
成功注入
文章介绍了ASP.NET页面中使用LIKE语句进行ACCESS查询的方法。直接拼接语句会有SQL注入风险,采用参数式传递又遇查询无结果问题,后引入instr()函数解决。同时提醒用此方法仍需过滤参数,还给出了测试注入的方法及注入原理。
402

被折叠的 条评论
为什么被折叠?



