TestNG框架使用

改进SQL盲注漏洞:从JDBC到PreparedStatement的安全实践

一、简介

       最近公司产品应客户要求,需要做安全加固:由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、源代码(详情查看附件)

        

         

### TestNG框架使用指南 TestNG是一个强大的开源测试框架,专为简化多种类型的测试而设计。它提供了丰富的功能和灵活的配置选项,能够满足从单元测试到集成测试的各种需求[^1]。 #### 1. 环境搭建 在开始使用TestNG之前,需要确保开发环境已经正确配置。以下是基本步骤: - **安装依赖**:对于Maven项目,可以在`pom.xml`中添加以下依赖项。 ```xml <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.4.0</version> <scope>test</scope> </dependency> ``` - **IDE集成**:TestNG与Eclipse、IntelliJ IDEA等主流IDE工具无缝集成。可以通过插件或内置支持直接运行TestNG测试用例[^2]。 #### 2. 基本概念与TestNG通过一系列解来定义测试行为,这些解使得测试代码更加直观且易于维护。以下是常用的解及其用途: - `@Test`:用于标记测试方法。 - `@BeforeMethod` 和 `@AfterMethod`:分别在每个测试方法执行前/后运行。 - `@BeforeClass` 和 `@AfterClass`:分别在类中的所有测试方法执行前/后运行。 - `@BeforeSuite` 和 `@AfterSuite`:分别在整个测试套件执行前/后运行。 - 示例代码如下: ```java import org.testng.annotations.*; public class SampleTest { @BeforeMethod public void setUp() { System.out.println("Before Method"); } @Test public void testExample() { System.out.println("Running Test"); } @AfterMethod public void tearDown() { System.out.println("After Method"); } } ``` #### 3. 测试参数化 TestNG支持通过`@Parameters`解实现参数化测试,允许同一个测试用例使用不同的输入数据运行。例如: ```java import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class ParameterizedTest { @Test @Parameters({"param1", "param2"}) public void testWithParameters(String param1, String param2) { System.out.println("Parameter 1: " + param1); System.out.println("Parameter 2: " + param2); } } ``` 参数值可以通过XML文件或命令行传递。 #### 4. 并发测试 TestNG内置了对并发测试的支持,可以轻松实现多线程测试执行。通过设置`parallel`属性,可以选择按方法、类或实例级别并行执行测试用例。例如: ```xml <suite name="ParallelTestSuite" parallel="methods" thread-count="5"> <test name="ParallelTest"> <classes> <class name="com.example.ParallelTestClass"/> </classes> </test> </suite> ``` #### 5. 报告生成 TestNG提供详细的测试报告功能,包括HTML格式的测试结果报告。此外,还可以通过自定义监听器扩展报告功能。例如,实现`ITestListener`接口以捕获测试事件并生成自定义日志。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值