Page 207 - 《软件学报》2026年第7期
P. 207
2892 软件学报 2026 年第 37 卷第 7 期
其添加至存储数据流集合 TaintStores 中. 对于 TaintStores 中收集到的所有共享数据, 算法根据共享数据类型、框
架等信息, 计算其对应的数据读取操作映射, 得到共享数据读取操作集合 TaintReads, 实现对存储段污染数据流与
读取段污染数据流的关联; 之后将未被分析过的所有读取操作转换为污点源模式配置, 添加至下一轮次分析的数
据源模式集合中. 重复迭代此过程, 直至分析结果中不再出现新的共享数据写入操作时终止.
算法的迭代次数为 n 时, 理论上可检测到首尾相接的 n 段程序控制流中污染数据流的传播过程. 由程序中共
享数据写入和读取操作等元素的有限性, 易知该迭代过程必然在有限轮次内收敛. 同时不难发现, 当程序中不存在
共享数据写入操作时, 该算法退化为传统污点分析的等价形式, 这保证了多段数据流分析相较于污点分析在漏洞
检测能力上的后向兼容性. 算法的分析复杂度与代码中的共享数据分布密度、迭代轮次数量存在关联, 相关细节
讨论见第 5.2 节.
2.1.2 多标签数据流分析
多标签数据流分析算法的整体流程如图 4(c) 所示, 其核心思路为引入污染标签概念, 用于区分不同语义类型
的污染变量, 进而横向增强现有污点分析算法对代码语义的理解与分析能力. 形式化地, 对于给定的污染标签集合
T = {t 1 ,t 2 ,t 3 ,...}, 多标签数据流分析将对传统污点分析算法的规则配置与流程中各个阶段执行如下增强.
● 漏洞规则中, 引入多标签污点源集合 S source ⊆ Source×T , 其满足如下条件:
(1)
∀s ∈ Source,∃t ∈ T,(s,t) ∈ S source
即需要为每个污点源模式指定一种或多种类型的污染标签信息.
v
● 污点传播追踪阶段, 算法将维护如下形式的多标签污染变量集合: V taint = {⟨v,t⟩|t ∈ T}, 其中 代表污染变量,
t 代表其对应的污染标签. 在污点分析过程中, 多标签污染变量集合存在如下两类元素更新方式.
(1) 通过污点源模式匹配, 将匹配到的污染变量加入集合时, 为其赋予与污点源模式对应的所有污染标签:
match
(s,t) ∈ S source ∧ s −−−→ v ⇒ V taint ← V taint ∪{⟨v,t⟩} (2)
(2) 通过已有污染变量传播至新变量 v′, 此时算法将遵循传统污点分析策略, 即在默认条件下, 独立处理不同类
型污点数据的传播与净化过程. 此外, 漏洞规则中支持自定义跨类型的污染传播谓词 isCrossTag(·), 若满足谓词条件,
算法将在传播污点时对不同类型的污染标签进行相互转化, 以进一步提高对程序语义的表征能力, 增加方法扩展性.
taint
′ ′
⟨v,t⟩ ∈ V taint ∧v −−→ v ⇒ V taint ← V taint ∪{⟨v ,t⟩}
(3)
′ ′ ′ ′
⟨v,t⟩ ∈ V taint ∧isCrossTag(⟨v,t⟩,⟨v ,t ⟩) ⇒ V taint ← V taint ∪{⟨v ,t ⟩}
● 敏感操作检测阶段, 将基于如下增强污点汇集合定义进行分析:
S sink = {⟨s,isVuln(V taint )⟩|s ∈ Sink} (4)
其中, s 表示污点汇模式, 用于匹配与漏洞相关的敏感操作; isVuln(·) 表示漏洞约束条件, 其功能除分析污染变量是
否流入敏感操作外, 还支持根据敏感操作中各个污染变量的污染标签信息进行综合分析, 由此实现更强大的安全
漏洞检测能力.
若多标签数据流分析规则配置中仅包含单个污染标签, 则其分析过程与传统污点分析等价, 这表明多标签数
据流分析在传统 Web 漏洞检测任务中同样具备后向兼容性. 实际分析过程中, 污染标签数量为有限值, 且绝大多
数变量仅对应单一类型的污染标签, 这些因素使得多标签数据流分析在性能上可接近传统污点分析的表现, 相关
细节将在第 5.2 节中详细讨论.
2.2 漏洞检测场景应用
本节将基于多种复杂类型 Web 安全漏洞, 介绍两类多数据流分析方法的实际应用场景与检测技术实现.
2.2.1 数据库存储型漏洞
作为 Web 应用中与业务逻辑和用户交互密切相关的核心组件, 数据库一直是 Web 安全领域的重要关注对象.
本文使用“数据库存储型漏洞”这一概念, 指代所有利用过程中涉及数据库读写及内容持久化存储的漏洞类型, 包
括但不限于存储型 XSS、二次注入等. 在数据库存储型漏洞场景中, 各个数据表中存放的元组对应共享数据概念,
INSERT 和 UPDATE 查询对应共享数据存储操作, 而 SELECT 查询则对应共享数据读取操作. 下文以 Java Web

