Page 206 - 《软件学报》2026年第7期
P. 206
毛祥煜 等: 面向 Web 应用漏洞检测的多数据流静态分析方法 2891
7. for each s ∈ TaintStmts do
8. if hasSink(Rule.Sink, s) then
9. Vulns ← Vulns ∪ report(s);
10. end if
11. if hasDataStore(s) and s < VisitedOps then
12. VisitedOps ← VisitedOps ∪ {s};
13. TaintStores ← TaintStores ∪ getStoredPath(s);
14. end if
15. end for
16. TaintReads ← calculateReadLink(TaintStores);
17. SourceSet ← TaintReads \ SourceSet;
18. until TaintReads == ∅;
19. return Vulns;
污点源匹配 污点传播追踪 敏感操作检测
(a) 传统污点分析
读取操作关联 存储数据流检测
程序中间表示
污点源补充
安全漏洞
污点源匹配 污点传播追踪 敏感操作检测
规则配置 (b) 多段数据流分析
多类型污点源匹配 污点传播追踪
污染标签 x 同标签传播 基于多标签污点的
敏感操作检测 程序控制流
污染标签 y 跨标签传播
污染数据流
污点源/污点汇
数据存储/读取
(c) 多标签数据流分析
图 4 多数据流分析方法概览
在完成单个轮次的污点传播追踪分析后, 算法将检查 TaintStmts 中的语句是否满足如下两类情况: (1) 若语句
包含与目标漏洞相关的敏感操作, 则报告安全漏洞; (2) 若语句包含针对共享数据的写入操作, 且该操作在前序迭
代轮次中未被分析过, 则执行对数据存储位置的细粒度域敏感分析 (如写入数据表的数据列、对象字段名等), 将

