Page 218 - 《软件学报》2026年第7期
P. 218
毛祥煜 等: 面向 Web 应用漏洞检测的多数据流静态分析方法 2903
MultiFlow CodeQL MultiFlow CodeQL
11 2 17 7
4 4
TP TP
FP FP
1 0
5 1 1 1
20 NPM packages 10 JavaScript Apps
图 10 MultiFlow 与 CodeQL 检测漏洞交集关系
4.5 RQ4: MultiFlow 分析效率评估
本节评估 MultiFlow 在不同类型 Web 漏洞检测场景下的分析效率表现.
4.5.1 基础分析效率
本节将比较 MultiFlow 与 3 种现有方法在 Web 漏洞检测任务中的基础分析效率. 具体步骤为基于第 4.2 节所
述各方法的漏洞规则集与运行参数不变, 对扫描流程重复执行 5 次统计总运行时间, 取平均值后得到各工具的平
均分析时间开销. 在运行时间统计标准上, 对于 MultiFlow、Coverity 与 Tai-e, 统计其端到端扫描过程的总用时;
考虑到 CodeQL 的分析对象为基于程序代码预先构建的数据库, 故分别统计其数据库构建和漏洞规则扫描两部分
用时, 合并作为总时间开销.
各个方法的分析总用时统计数据如表 8 所示. 得益于采用抽象语法树遍历的数据流分析实现方式, MultiFlow
在分析效率上均存在显著优势, 相较于 CodeQL 和 Tai-e 的提速比分别为 2.56 和 3.53 倍, 相较于 Coverity 的提速
比则高达 19.98 倍. Coverity 在扫描前需要首先完成代码编译操作, 同时在工具设计上更偏向于通用化的分析模
式, 这些因素共同决定了其在 Web 应用场景下高昂的分析开销; 对于 CodeQL 与 Tai-e, 影响其分析开销的核心因
素在于, 其分析所需数据的全量预构建步骤 (如 CodeQL 的代码数据库构建、Tai-e 的中间表示 IR 生成与全局指
针分析) 均需要较长时间完成, 对于大型项目而言尤其如此; MultiFlow 选择基于抽象语法树的分析策略, 预构建步
骤开销较小. 综合而言, 相较于现有漏洞检测方法, MultiFlow 可更加高效地完成漏洞检测分析任务.
表 8 OWASP benchmark 分析效率对比
分析总用时 (s)
代码行总数
Coverity CodeQL Tai-e MultiFlow
191 612 1 680.01 215.17 296.74 84.10
考虑 MultiFlow 的分析时间与程序代码规模的关系, 计算可知, 在基准漏洞数据集上分析用时平均值为
0.439 ms/LOC (每代码行 0.439 ms); 后续实验中将继续使用该指标, 评估 MultiFlow 使用的两类多数据流分析方法
在分析效率上的表现.
4.5.2 多数据流方法分析效率
本节评估多标签数据流分析方法在两种应用场景下的分析效率表现, 评估时仍遵循如第 4.3、4.4 节所述实验
步骤不变, 运行时间统计标准与第 4.5.1 节相同. 在评估原型链污染漏洞检测场景时, 考虑到 MultiFlow 针对
JavaScript 项目与第三方组件的漏洞规则存在一定的差异, 运行时间将基于不同应用分组进行统计; 此外, 将同时
评估 CodeQL 的分析效率进行对比.
各个扫描任务的分析时间开销详细数据如表 9 所示. 在数据库存储型漏洞检测任务中, MultiFlow 使用的多段
数据流分析方法平均每代码行分析用时为 0.466 ms, 相较基础污点分析存在 6.08% 的额外开销, 这部分额外开销
主要来源于算法 1 中与共享数据相关的迭代分析过程, 以及二者的分析目标差异 (前者为基准用例, 后者为工业级
真实 Web 应用). 这证明了 MultiFlow 的多段数据流分析方法能够在不产生过多额外开销的前提下, 将分析能力扩
展至异步过程场景, 满足工业界真实场景下的轻量级 Web 漏洞扫描需求.

