转自:http://blog.csdn.net/adams1998/article/details/7011148
SQL注入攻击
SQL注入攻击的基本原理,是从客户端合法接口提交特殊的非法代码,让其注入到服务器端执行业务的SQL中去,进而改变SQL语句的原有逻辑和影响服务器端正常业务的处理。
SQL注入攻击是Web应用中一个重要的安全问题,虽然Java具备较高的安全性,但如果开发人员不注意,也有可能留下安全隐患,请看示例:
执行验证的SQL语句
现有一个Login页面用来控制WebApp的入口,用户想要进入只有输入“用户名”和“密码”,负责用户登录处理的Servlet接受到请求后,将看数据表usertable中是否存在这个用户名和密码,如果存在则让其进入,否则拒绝,进行验证的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注入攻击多在特殊字符上下手脚,如“’”,“*”,“/” ,”--”等,如果用正则表达式限制特殊字符输入,这些手段将没有效果。下面的代码将阻止含有特殊字符的请求。
使用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提交中发起。
2.使用PreparedStatement执行Sql语句比Statement安全得多,如果能使用PreparedStatement就不该用Statement,当然SQL主体和参数应该分开。
3.如果因为要执行动态多变的SQL语句而不得已采用Statement,则应该在服务器端用正则表达式进行输入验证。
4.客户端验证可能被取消,因此服务器端验证必不可少。
分享到:
相关推荐
SQL注入攻击及其防范技术研究.pdf
本文简要介绍了SQL注入攻击的原理,SQL注入攻击实现过程,并在此基础上给出了一种SQL注入攻击的自动防范模型。对SQL注入攻击的方法、原理以及攻击实施过程进行了阐述和总结,并给出了常见的一些SQL注入攻击防范方法...
SQL注入攻击及其防范措施分析.pdf
SQL注入攻击及其防范检测技术研究.pdf
SQL注入攻击及其防范检测技术的研究.pdf
浅谈SQL注入攻击与防范.pdf
SQL注入攻击及其防范检测技术的研究 (1).pdf
SQL注入攻击与防范措施.pdf
SQL注入攻击是黑客常用的网络攻击手段之一。文章分析了SQL注入攻击的原理和攻击步骤,针对性地提出了从程序编写和服务器设置两方面有效预防SQL注入攻击的方法。
针对在ASP.NET下数据库的安全性,介绍了SQL注入攻击的概念,详细分析了几种攻击方式,并提出一些防范SQL注入攻击的措施,极大地减少SQL注入攻击的可能性,尽可能保证数据库安全,最后通过项目实例说明如何运用ASP...
浅议SQL注入攻击原理及其防范措施.pdf
SQL注入是Internet上最危险、最有名的安全漏洞之一,《SQL注入攻击与防御》是目前唯一一本专门致力于讲解SQL威胁的图书。《SQL注入攻击与防御》作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的...
SQL注入攻击的原理及其防范措施
SQL注入攻击可以算是互联网上最为流传最为广泛的攻击方式,许多企业网站先后遭此攻击。所谓SQL 注入(SQLInjection),就是利用程序员对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交特殊的代码,...
SQL注入攻击是一种已经长期存在,但近年来日益增长的安全威胁,《安全技术经典译丛:SQL注入攻击与防御(第2版)》致力于深入探讨SQL注入问题。 《安全技术经典译丛:SQL注入攻击与防御(第2版)》前一版荣获2009...
SQL注入式攻击下的数据库安全——SQL Server下SQL注入攻击的有效防范.pdf
SQL注入攻击实验报告,自己写了试验的网站,举了一些基本的攻击和防御方法,有xp_cmdshell的执行,用的是sqlserver 2005
SQL注入攻击与防范研究,SQL是目前最流行的攻击之一,大家可以通过这篇文章很好的了解这一技术。
深入分析SQL注入攻击及安全防范.....