access查询上半年语句_[原创]ACCESS 查询时使用 LIKE语句

文章介绍了ASP.NET页面中使用LIKE语句进行ACCESS查询的方法。直接拼接语句会有SQL注入风险,采用参数式传递又遇查询无结果问题,后引入instr()函数解决。同时提醒用此方法仍需过滤参数,还给出了测试注入的方法及注入原理。

文章来源:

西宁威势电子信息服务有限公司

发布时间: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'

成功注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值