|
|
||||
首页
文学作品 网页设计 平面设计 程序设计 考试认证 基础办公 QQ资源 服务器架设 网站运营 网页资源
|
|
|
| 汉南在线 → 网页设计 → Asp动态程序 | |||||||||||
SQL注入攻击的基本原理,是从客户端合法接口提交特殊的非法代码,让其注入到服务器端执行业务的SQL中去,进而改变SQL语句的原有逻辑和影响服务器端正常业务的处理。 SQL注入攻击是Web应用中一个重要的安全问题,虽然Java具备较高的安全性,但如果开发人员不注意,也有可能留下安全隐患,请看示例:
执行验证的SQL语句 select count(*) from usertable where name='用户名' and pswd='密码‘执行完这条SQL语句后,如果记录数等于零说明在usertable表找不到用户名和密码对应的记录,应该拒绝;如果记录数大于零则说明能在usertable表中找到对应的记录,应予放行。 如果用户进行SQL注入则可使验证无效 如果用户通过某种途径知道或是猜测出了验证SQL语句的逻辑,他就有可能在表单中输入特殊字符改变SQL原有的逻辑,比如在名称文本框中输入“ ‘ or ’1‘=’1‘ or ’1‘=’1 ”或是在密码文本框中输入“ 1‘ or ’1‘=’1 ”,SQL语句将会变成: 1. select count(*) from usertable where name='' or '1'='1' or '1'='1 ' and pswd='' 2. select count(*) from usertable where name='' and pswd='1' or '1'='1' 明显,or和单引号的加入使得where后的条件始终是true原有的验证完全无效了。 使用正则表达式屏蔽特殊字符 使用SQL注入攻击多在特殊字符上下手脚,如“’”,“*”,“/” ,”--”等,如果用正则表达式限制特殊字符输入,这些手段将没有效果。下面的代码将阻止含有特殊字符的请求。 ![]() if(Pattern.matches("\\w+", name)==false || Pattern.matches("\\w+", pswd)==false ) { // 返回login界面 request.setAttribute("feedbackMsg", "用户名和密码不允许包括特殊字符"); RequestDispatcher dispatcher = request.getRequestDispatcher("/web/page/login1.jsp?curr=0"); dispatcher.forward(request, response); return; }使用PreparedStatement代替Statement SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement执行SQL语句,其后只是输入参数, SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。示例代码如下: Connection conn=null; PreparedStatement ps=null; ResultSet rs=null;![]() String sql=" select count(*) from usertable where name=? and pswd=? "; ps=conn.prepareStatement(sql); ps.setString(1, name); ps.setString(2, pswd);PreparedStatement的错误使用 用PreparedStatement来防范SQL注入攻击是因为“因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构”,如果如下使用则起不到这个效果,因为SQL语句和参数没有分开,它们被组合在一起被一次性提交了。 Connection conn=null; PreparedStatement ps=null; ResultSet rs=null;![]() 。。。。 conn=DBUtil.getConnection(); sql=" select count(*) from usertable where name='"+name+"' and pswd='"+pswd+"' "; ps=conn.prepareStatement(sql); rs=ps.executeQuery();这种情况下要防范SQL注入攻击还是要借助于正则表达式。 小结 1.Web系统通常采用数据库作为数据源,而大多数业务处理都离不开SQL语句,因此系统潜在就有被SQL注入攻击的隐患,攻击可能会从任何一次URL提交或是FORM提交中发起。 示例代码: 本文来自:http://www.blogjava.net/sitinspring/archive/2008/10/11/233776.html
| |||||||||||
| >> 相关文章 | |||||||||||
|
授权使用:汉南在线 http://www.hzwz.net/(2008-2009) Copyright (c) 2002-2007 汉南在线. All Rights Reserved . 经营许可证:陕ICP备05000109号 Powered by:汉南在线 |