You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Semgrep规则捕获函数参数传递的可解析值?

调整Semgrep规则以捕获参数传递的classicName值

要检测通过函数/构造函数参数传递的classicName值,核心是利用Semgrep的数据流分析能力追踪参数来源,结合模式匹配覆盖不同传递场景。以下是具体的规则调整方案:

核心思路

通过metavariable-analysis启用字符串数据流追踪,配合metavariable-pattern和pattern-inside限定参数上下文,确保识别从输入参数到classicName赋值的完整路径,同时验证最终值是否匹配.*hello.*正则。

完整规则示例

rules:
  - id: detect-classic-with-hello-name
    languages: [typescript]
    message: 检测到classicName包含"hello"的Classic实例
    severity: WARNING
    patterns:
      # 主模式:匹配new X.Classic调用,且配置对象中包含classicName字段
      - pattern: new $X.Classic($ARGS, {..., classicName: $Y, ...})
      # 覆盖三种$Y的来源场景
      - any:
          # 场景1:硬编码字符串直接匹配正则
          - metavariable-pattern:
              metavariable: $Y
              pattern: "\"*hello*\""
          # 场景2:类实例属性,来自构造函数参数
          - all:
              - metavariable-pattern:
                  metavariable: $Y
                  pattern: this.$PROP
              - pattern-inside: |
                  class $CLASS {
                    constructor($PROP: string) {
                      this.$PROP = $PROP;
                    }
                    $METHOD() {
                      ...
                    }
                  }
          # 场景3:当前函数的入参
          - all:
              - metavariable-pattern:
                  metavariable: $Y
                  pattern: $ARG
              - pattern-inside: |
                  function $FUNC($ARG: string) {
                    ...
                  }
      # 关键:追踪$Y的数据流,验证最终值匹配正则
      - metavariable-analysis:
          metavariable: $Y
          analyzer: string
          regex: ".*hello.*"

规则各部分说明

  1. 主模式:定位所有new $X.Classic调用,且配置对象中存在classicName赋值。
  2. 多场景覆盖:用any组合三种常见的$Y来源,确保不遗漏硬编码、类实例属性、函数参数的情况。
  3. 数据流分析:metavariable-analysis会自动追踪$Y的所有可能来源,验证最终传入的字符串是否匹配.*hello.*,哪怕值是通过多层参数传递过来的。

注意事项

  • 确保使用Semgrep v1.20及以上版本,该版本开始支持metavariable-analysis的字符串追踪功能。
  • 可根据实际代码结构调整pattern-inside的模板,比如支持箭头函数、类的私有属性、不同的参数传递方式。
  • 如果需要减少误报,可以给pattern-inside添加更精确的类型或命名约束,比如限定$PROP的命名规则。

内容的提问来源于stack exchange,提问作者Nikhil Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:27:08