一、簡介
最近公司產品應客戶要求,需要做安全加固:由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、源代碼(詳情查看附件)