Page 205 - 《软件学报》2026年第7期
P. 205

2890                                                       软件学报  2026  年第  37  卷第  7  期



                  1  app.post(“/comment”, (req, res) => {   1   @RequestMapping(“updatePassword”)
                  2    const {content} = req.body;          2   public void updatePassword(String password) {
                  3    db.query(                            3       int userId = Integer.parseInt(SessionHelper.getOperateId());
                  4    “INSERT INTO comments (content) VALUES (?)”,   4       User user = new User();
                  5    [content]                            5       user.setId(userId);
                  6    );                                   6       user.setPassword(password);
                  7    res.redirect(“/”);                   7       userMapper.update(user);
                  8  });                                    8   }
                  9  app.get(“/”, (req, res) => {           9   <!-- UserMapper.xml -->
                  10    db.query(                          10   <mapper namespace=“com.example.mapper.UserMapper”>
                  11    “SELECT * FROM comments”,          11      <update id=“update” parameterType=“com.example.entity.User”>
                  12     (err, results) => res.render(“index”, {comments: results});   12          UPDATE user SET password = #{password} WHERE id = #{id}
                  13    );                                 13      </update>
                  14  });                                  14  </mapper>
                            (a) 跨控制流异步场景                                    (b) 细粒度输入场景
                                               图 3 复杂   Web  应用程序逻辑示例

                  2   面向  Web  应用安全的多数据流分析方法

                    针对现有    Web  静态分析技术因底层污点分析局限而导致的适用性不足、检测准召率低等问题, 本文提出了
                 一种面向    Web  应用安全场景的多数据流静态分析方法. 该方法通过引入多段数据流分析与多标签数据流分析两
                 类子方法, 从多个维度对图        2  所示的传统污点分析算法进行增强, 显著提升其在复杂                Web  应用程序场景下的检测
                 能力. 同时, 该方法不依赖于具体的编程语言, 具备良好的泛用性. 以下将详细阐述多数据流分析方法的设计思路
                 及其应用场景.
                  2.1   方法设计
                  2.1.1    多段数据流分析
                    多段数据流分析方法的整体流程如图              4(b) 所示, 将传统的单次污点传播追踪过程扩展为多轮次                (multi-pass)
                 迭代分析形式, 从而实现对污点分析算法的纵向能力增强. 其核心思想是关注                        Web  应用程序中常见的跨过程持久
                 化数据   (如数据库表、线程共享内存、全局会话变量, 以下简称共享数据). 在污点分析过程中, 方法通过记录污染
                 变量流入共享数据并存储的操作, 捕捉不同执行路径间的污染数据流关联, 从而实现对异步执行过程中的                                  Web  安
                 全漏洞检测能力.
                    算法  1  为多段数据流迭代分析的伪代码实现. 算法以待分析应用程序的中间表示                        P 和目标漏洞规则      Rule 为
                 输入, 在实际分析中,     P 可根据需求选用程序的抽象语法树、控制流图或其他中间表示形式. 算法首先基于规则中
                 配置的污点源模式信息, 初始化数据源模式集合               SourceSet 并执行首轮污点分析. 具体而言, 对于        SourceSet 中的每
                 个污点源模式, 在     P 中匹配符合该模式的输入变量并标记为污点, 之后遵循传统污点分析的工作原理, 沿控制流跟
                 踪污染变量在程序中的传播与净化过程, 将污染数据流经过的所有代码语句添加至                           TaintStmts 集合中.
                 算法  1. 多段数据流迭代分析算法.

                 输入: 待分析应用     P, 漏洞规则  Rule;
                 输出: 安全漏洞集合      Vulns.

                 1. Vulns  ← ∅;
                 2. SourceSet  ← Rule.Source;
                 3. VisitedOps  ← ∅;
                 4. repeat
                 5.    TaintStores  ← ∅;
                 6.    TaintStmts = taintPropagation(P, SourceSet);
   200   201   202   203   204   205   206   207   208   209   210