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) 若语句包含针对共享数据的写入操作, 且该操作在前序迭
                 代轮次中未被分析过, 则执行对数据存储位置的细粒度域敏感分析 (如写入数据表的数据列、对象字段名等), 将
   201   202   203   204   205   206   207   208   209   210   211