A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾波 中级黑马   /  2013-11-27 22:21  /  2336 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是SQL注入,JDBC如何防止SQL注入?

评分

参与人数 1黑马币 +3 收起 理由
枫儿 + 3

查看全部评分

2 个回复

倒序浏览
因为每个数据库都可能有漏洞,就像系统一样。那么某些人就会针对这些漏洞,写针对性的代码
注入思路是这样;发现SQL注入位置;判断服务器类型和后台数据库类型;确定可执行情况
注入法:
从理论上说,认证网页中会有型如:
select * from admin where username='XXX' and password='YYY' 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。
如在用户名文本框内输入:abc’ or 1=1-- 在密码框内输入:123 则SQL语句变成:
select * from admin where username='abc’ or 1=1 and password='123’ 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

我上边的是粘贴的,没怎么看懂。

防止注入:
对于jsp一般会
如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.

其余的方法有兴趣可以参考这里
http://www.blogjava.net/GavinMiao/archive/2011/08/24/357182.html

评分

参与人数 1黑马币 +3 收起 理由
枫儿 + 3 赞一个!

查看全部评分

回复 使用道具 举报
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。
据统计,网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。



  要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBC API例子:

  PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?");

  prep.setString(1, pwd);

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马