基于SSH的J2EE架构的安全问题研究
2015-04-28陈姗万晓燕
陈姗 万晓燕
摘 要:本文本文以网上基金交易平台这个项目为例,探讨了项目开发中权限控制、加密方法等安全性问题。
关键词:SSH;权限控制;MD5加密
随着Java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE平台得到了长足的发展,Struts+Spring+Hiber
nate三者结合起来成为当今企业开发中普遍使用的一种快速高效的开发模式。但是,作者在利用这种模式进行实际项目开发时遇到了很多安全性的问题。本文以网上基金交易平台项目为例,探讨了基于SSH的项目在开发过程中会遇到的重要安全性问题以及相应的解决方案。
一、SSH开发模式
SSH模式是基于J2EE架构的一种Framework,用Struts实现表示层,用Spring实现业务层,用Hibernate实现持久层,然后把这三者整合起来应用到项目开发中。
Struts是 Apache Jakarta项目推出的一个开源的Java Web框架,它很好的实现了MVC设计模式。Spring是一款近几年非常流行的、开源的开发框架,Spring的核心是一个实现了IoC(Inversion of Control)模式的轻量级容器。Hibernate是目前最流行的ORM框架,是连接Java对象模型(java object modle)和关系数据模型的桥梁,它对JDBC进行了轻量级的封装,不仅提供ORM映射服务,还提供数据查询和数据缓冲功能。
二、SSH开发中存在的安全性问题及解决方案
本文下面以项目中登陆模块为例,探讨一下针对这些安全性问题的解决方案。
(一)权限控制实现。在本系统中,需要权限管理的问题有很多。下面举其中一个作为例子,说明一下我们关于权限控制的实现思路。
基金交易操作人员分两个等级,高级操作人员可以注册新的操作员、对基金进行增删改的操作,而普通操作人员仅能进行查询基金信息、买卖基金等操作。我们定义不同的变量区分不同操作任务,如delFund代表删除基金,值“1”为有权限,值“0”为无权限。
为了存取的方便和信息的安全,我们将所有权限信息封装在一个类UserInfo中,在用户登录系统后根据用户的角色将其权限写入session,当用户要进行某个操作时,我们首先从
session中取出其权限值进行判断,如果权限不够则返回到相应的报错页面,并在log中记录该越权操作,在用户退出系统后销毁session中相应的权限数据。
由于本系统采用SSH整合模式,我们可以利用AOP编程实现细粒度的权限管理。定义一个权限管理模块,在Dele
gatingActionProxy中调用该权限管理模块针对具体的对象和操作进行权限判断,如果具有该权限,则将请求发生到相应的
Action操作。经过这样的设计处理后,很好的实现了权限控制,而且系统代码耦合性低、易于扩展。
(二)防止SQL注入式攻击。SQL注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的一种攻击方式是,有查询语句:
statement := "SELECT * FROM users WHERE name = '"
+ userName + "';
该语句的目的本来在于测试用户名是否合法,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作就不是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:a' or 't'='t,此时原始语句发生了变化:SELECT * FROM users WHERE name = 'a' OR 't'='t';这样一来,在认证过程中,用户名就被认为永久性合法了,这对于web系统来说显然是非常危险的。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
基金交易系统式非常容易受到这种攻击的,侵入者通常采用这种方式盗取客户的帐户和密码,使客户蒙受巨大的经济损失,所以如何防止SQL注入式攻击也是作者在系统设计中着重考虑的一个问题。经过一系列实验和探讨,作者最终采用了如下方法。
以往作者直接使用JDBC连接数据库时,通常采用
PrepareStatement来解决注入式攻击的问题,在SSH架构中,持久层使用的是Hibernate连接,所以使用采用占位符防止SQL注入式攻击更为简单。
结束语:对于web应用系统的搭建来说,系统的安全性是一个至关重要的问题,经过作者在权限控制、加密、验证码、sql注入式攻击几方面的改进之后,整个系统具有了更好的安全性和健壮性,同时还保证了代码的低耦合和易于扩展。本文讨论的SSH模式的几种安全方案具有很好的实践意义,是对SSH模式一个很好的改进。
参考文献:
[1] Struts official network..The apache software foundation [EB/OL]. http://struts.apache.org/.
[2] Hibernate official network.Relational Persistence for Java and.NET[EB/OL]. http://www.hibernate.org.