黑马程序员技术交流社区

标题: 什么是SQL注入,JDBC如何防止SQL注入? [打印本页]

作者: 贾波    时间: 2013-11-27 22:21
标题: 什么是SQL注入,JDBC如何防止SQL注入?
什么是SQL注入,JDBC如何防止SQL注入?
作者: ysunday    时间: 2013-11-27 22:41
因为每个数据库都可能有漏洞,就像系统一样。那么某些人就会针对这些漏洞,写针对性的代码
注入思路是这样;发现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
作者: 容嬷嬷当年也是    时间: 2013-11-28 01:02
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);





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2