一、简介
最近公司产品应客户要求,需要做安全加固:由IBM Security AppScan Standard软件进行扫描,针对扫描结果报告中的问题,进行修复。由于公司产品使用时间较长,其整个Dao层没有采用Hibernate等流行的ORM框架,而使用原生JDBC封装并且直接使用简单字符串拼接形成增删改查SQL语句,所以被扫描出大量SQL盲注的漏洞。
二、解决方案
1、修改整个DAO层。使用PreparedStatement,采用预编译的方式防止SQL盲注。
2、由于DAO层属于产品的核心层,如此大规模的修改底层结构,需要进行详细测试,保证产品应用层的功能正常,所以采用TestNG+DBUnit测试框架,对DAO层的每处修改进行测试,保证DAO层的正确性。
三、具体实现
1、利用Java类文件名大小写敏感的语法特性,创建与原DAO类文件相同名字(Dao-->DAO)的类文件。覆写所有在产品中应用到的DAO方法,采用相对安全的SQL语句。
2、由于产品中使用的近百张表,所有手动构建测试数据,工作量异常繁琐,并且容易出错,所以利用VO文件与数据库表名的固定对应关系,使用反射机制动态生成测试数据。
3、利用产品中的通用数据库连接池功能模块,通过配置测试数据库的配置信息,供测试类方法调用。
4、将DAO测试类通用的方法,如:测试方法调用前,资源的准备;测试方法调用后,资源的释放。通过TestNG的@BeforeMethod与@AfterMethod注解,进行配置调用。
四、详细代码
1、代码列表
ConnectionPool.java
BasicConnectionPoolTestUtil.java(为DBUnit提供数据源)
testdb.properties
testng-dao.xml
DaoTestSuite.java
AlarmValue.java(VO)
BaseDAO.java
AlarmDAO.java(原DAO)
AlarmDao.java(新DAO)
AlarmDaoTest.java
2、源代码(详情查看附件)