Page 203 - 《软件学报》2026年第7期
P. 203
2888 软件学报 2026 年第 37 卷第 7 期
化改进, 提出了多标签数据流分析技术, 该技术在同一控制流中对污染数据流进行细致化分类, 使用污染标签表征
程序中不同输入变量, 捕获更加丰富的程序执行上下文语义信息, 进而实现对复杂 Web 漏洞的精确检测. 基于多
数据流分析方法, 本文实现了面向 Java Web 和 JavaScript Web 应用的安全漏洞检测原型系统 MultiFlow, 支持检
测数据库存储型漏洞、越权访问与原型链污染等 Web 漏洞.
本文构建了包含 30 个 Java Web 应用和 30 个 JavaScript Web 应用的真实应用数据集, 结合 OWASP benchmark
基准漏洞数据集, 从多方面对 MultiFlow 开展详细的实验评估. 实验结果表明, MultiFlow 具备良好的 Web 漏洞检
测性能, 相较于 3 种现有 SAST 工具在检测准召率 (Precision and Recall) 与分析效率上均取得更优秀的表现;
MultiFlow 的多段数据流分析方法共检测到 39 例数据库存储型漏洞, 精确率为 87.18%, 涉及 XSS、SSRF (server-
side request forgery)、远程代码执行 (remote code execution, RCE) 等多种 Web 漏洞类型; MultiFlow 的多标签数据
流分析方法以较小的额外开销, 实现对各类复杂 Web 漏洞的精准检测能力, 共识别到 40 例越权访问漏洞 (精确率
为 75.00%)、43 例原型链污染漏洞 (精确率为 83.72%), 获得 8 个 CVE 编号.
本文的主要贡献与创新点如下.
(1) 提出面向 Web 应用安全场景的多数据流静态分析方法, 通过引入多段数据流分析与多标签数据流分析两
类子方法, 在纵、横两个维度扩展了传统的污点分析能力, 显著提升了其对复杂漏洞场景的覆盖能力与检测精确率.
(2) 基于多数据流分析方法, 实现了面向 Java Web 与 JavaScript Web 应用的安全漏洞检测原型系统 MultiFlow,
并针对 Web 应用场景进行了多项优化, 提升了实用性与可扩展性.
(3) 在真实 Web 应用与漏洞基准数据集上对 MultiFlow 进行全面评估, 验证了多数据流分析方法的有效性, 同
时表明 MultiFlow 在 Web 漏洞检测准召率与分析效率上, 相较于现有静态分析技术具备明显优势.
本文第 1 节介绍相关研究背景. 第 2 节介绍本文提出的多数据流分析方法设计及其应用场景. 第 3 节介绍分
析原型系统 MultiFlow 的具体实现细节. 第 4 节对 MultiFlow 开展实验评估, 并对评估结果进行分析. 第 5 节对研
究做进一步讨论. 第 6 节介绍与本文相关的其他工作. 第 7 节总结全文.
1 研究背景
1.1 控制流与数据流
程序分析 [19] 是指软件工程领域中通过形式化方法, 对程序结构、行为及正确性、健壮性和安全性等特征进
行系统性研究的过程. 控制流 (control flow) 和数据流 (data flow) 是程序分析领域的两个核心概念, 用于描述程序
的不同行为特性.
控制流是指程序执行过程中指令的执行顺序, 反映了程序逻辑的结构和流程. 它决定了程序中哪些代码会被
执行, 以及执行的先后顺序. 控制流分析通常基于控制流图 (control flow graph, CFG) 开展, 控制流图由基本块
(basic block) 和边 (edge) 构成. 基本块代表一段顺序执行的代码序列, 具有单一入口和出口, 内部无分支或跳转; 边
表示基本块间的控制转移关系 (如条件跳转、循环跳转). 在图 1 展示的代码片段中, 程序在执行至 if-else 分支语
句时, 将根据 condition 变量的取值情况进入两条不同的控制流分支, 并在 x = call(c) 语句处汇合.
1 a = input(); a = input()
2 b = “safe”;
b = “safe”
3 if (condition) {
4 c = b; if (condition)
5 } else {
6 c = a;
c = b c = a
7 }
॥ᇅੀ
8 x = call(c); x = call(c) ඔऌੀ
图 1 代码控制流与数据流示例

